Delphi MessageBox

MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对框。
 1、函数原型及参数
 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
 hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
 Text:欲显示的信息字符串。
 Caption:对话框标题字符串。
 Type:对话框类型常量。
 该函数的返回值为整数,用于对话框按钮的识别。
 2、类型常量
 对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
 (1)按钮组合常量
 MB_OK = $00000000;         //一个确定按钮
 MB_OKCANCEL = $00000001;      //一个确定按钮,一个取消按钮
 MB_ABORTRETRYIGNORE = $00000002;  //一个异常终止按钮,一个重试按钮,一个忽略按钮
 MB_YESNOCANCEL = $00000003;     //一个是按钮,一个否按钮,一个取消按钮
 MB_YESNO = $00000004;        //一个是按钮,一个否按钮
 MB_RETRYCANCEL = $00000005;     //一个重试按钮,一个取消按钮
 (2)缺省按钮常量
 MB_DEFBUTTON1 = $00000000;     //第一个按钮为缺省按钮
 MB_DEFBUTTON2 = $00000100;     //第二个按钮为缺省按钮
 MB_DEFBUTTON3 = $00000200;     //第三个按钮为缺省按钮
 MB_DEFBUTTON4 = $00000300;     //第四个按钮为缺省按钮
 (3)图标常量
 MB_ICONHAND = $00000010;        //“×”号图标
 MB_ICONQUESTION = $00000020;      //“?”号图标
 MB_ICONEXCLAMATION = $00000030;    //“!”号图标
 MB_ICONASTERISK = $00000040;      //“i”图标
 MB_USERICON = $00000080;        //用户图标
 MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
 MB_IConERROR = MB_ICONHAND;      //“×”号图标
 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
 MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
 (4)运行模式常量
 MB_APPLMODAL = $00000000;    //应用程序模式,在未结束对话框前也能切换到另一应用程序
 MB_SYSTEMMODAL = $00001000;   //系统模式,必须结束对话框后,才能做其他操作
 MB_TASKMODAL = $00002000;    //任务模式,在未结束对话框前也能切换到另一应用程序
 MB_HELP = $00004000;       //Help Button
 3、函数返回值
 0            //对话框建立失败
 idOk = 1        //按确定按钮
 idCancel = 2      //按取消按钮
 idAbout = 3       //按异常终止按钮
 idRetry = 4       //按重试按钮
 idIgnore = 5      //按忽略按钮
 idYes = 6        //按是按钮
 idNo = 7        //按否按钮

例子:messagebox(0,'没有选择播放类型','错误',MB_ICONEXCLAMATION );

–Application.MessageBox('MessageBox','警告',MB_ICONWARNING+MB_YesNo);
–MessageBox(Form1.Handle,'MessageBox','提示',MB_ICONINFORMATION+MB_OkCancel);
–MessageBox(Form1.Handle,'MessageBox','提示‘,MB_ICONINFORMATION+MB_OkCancel+MB_DEFBUTTON2);
— if MessageBox(Form1.Handle,'MessageBox','提示',MB_ICONINFORMATION+MB_OkCancel)= idOk then
     begin
       ShowMessage('Ok');
     end;

 ————————————————————————–

MessageDlg用法

messageDlg, 是在对话框显示消息,并等待用户点击一个按钮,然后返回一个整数确定知道是那个按钮.
原型:MessageDlg(const Msg: string; DlgType: TMsgDlgType;Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer

Msg:想要提示的文字
DlgType:对话框的类型
Buttons:对话框中的按钮
HelpCtx:定义对话框的帮助屏幕,使用HelpCtx参数可以指定当用户单击Help按钮或按F1键所弹出的帮助主题的帮助上下文ID,一般也用不上,用0,表示帮助主题为空。

对话框类型:
mtwarning——含有感叹号的警告对话框
mterror——含有红色叉符号的错误对话框
mtinformation——含有蓝色i符号的信息对话框
mtconfirmation——含有绿色问号的确认对话框
mtcustom——不含图标的一般对话框,对话框的标题是程序的名称

按钮组中的按钮:
mbYes——mrYes或6
mbNo——mrNo或7
mbOk——mrOk或1
mbCancel——mrCancel或2
mbHelp——help按钮
mbAbort——mrAbort或3
mbRetry——mrRetry或4
mbIgnore——mrIgnore或5
mbAll——mrAll或8
mbNoToAll——9
mbYesToAll——10

举例:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Messagedlg('你确定吗',mtWarning,[mbYES,mbNO],0);
   MessageDlg('错误(1001)',mtError,[mbCancel],0);
end;

MessageDlg()信息的汉化

Delphi中的常量都放在consts.pas中,修改它可以达到汉化的目的.如:
MessageDlg()显示的窗口标题及其中的
按钮标题都是英文,虽然不影响使用,但在一个中文软件中总显得有些不协调.
为此在consts.pas中查找以下内容:
"SMsgDlgWarning"

SMsgDlgWarning = 'Warning';
SMsgDlgError = 'Error';
SMsgDlgInformation = 'Information';
SMsgDlgConfirm = 'Confirm';
SMsgDlgYes = '&Yes';
SMsgDlgNo = '&No';
SMsgDlgOK = 'OK';
SMsgDlgCancel = 'Cancel';
SMsgDlgHelp = '&Help';
SMsgDlgHelpNone = 'No help available';
SMsgDlgHelpHelp = 'Help';
SMsgDlgAbort = '&Abort';
SMsgDlgRetry = '&Retry';
SMsgDlgIgnore = '&Ignore';
SMsgDlgAll = '&All';
SMsgDlgNoToAll = 'N&o to All';
SMsgDlgYesToAll = 'Yes to &All';
改成
SMsgDlgWarning = '警告';
SMsgDlgError = '错误';
SMsgDlgInformation = '提示';
SMsgDlgConfirm = '确认';
SMsgDlgYes = '是(&Y)';
SMsgDlgNo = '不(&N)';
SMsgDlgOK = '确定';
SMsgDlgCancel = '取消';
SMsgDlgHelp = '帮助(&H)';
SMsgDlgHelpNone = '没有该帮助信息';
SMsgDlgHelpHelp = '帮助';
SMsgDlgAbort = '放弃(&A)';
SMsgDlgRetry = '重试(&R)';
SMsgDlgIgnore = '忽略(&I)';
SMsgDlgAll = '全部(&A)';
SMsgDlgNoToAll = '全都不(&O)';
SMsgDlgYesToAll = '全都是(&A)';
然后重新编译Consts.pas,把Consts.dcu
拷到delphi的lib和slib子目录下,就OK啦!

Delphi 遍历控件 遍历组件

特别在动态创建控件时,有时经常需要遍历控件。

如果知道控件名称,则可以通过FindComponent – 查找(定位)组件,如果不知道的话,只能遍历控件了。

遍历一个Panel上的所有控件:

Var
	i: integer;
begin
	for i:=0 to Panel1.ControlCount do
		begin
			// 控件: Panel1.Controls[i]
			// 自己的业务逻辑代码
		end;
end;

以下是根据控件的某个属性来定位,并且批量修改属性

var
  I:integer;
begin
  for i:=0 to Self.Componentcount-1 do//Self.Componentcount就是TForm1的控件数量
    begin
      if Self.Components[i] is TRzEdit then   //判断控件是否为TRzEdit
        begin
          if (Self.Components[i] as TRzEdit).Text='' then CWMsg.M(Self.Components[i].Name);
        end;
    end;
end;

关于已知控件名称的话,则建议使用FindComponent

SQL Server 日期时间格式转换

开发软件的人经常也要接触到数据库,无论是做视图,还是做存储过程,都会接触到Select日期。

有时候根据不同的项目需求,选择出的日期有时候会有不同的格式要求,比如只取日期不取时间,比如计算日期间隔等。

我每次遇到这个问题,都要重新打开浏览器,重新搜索以便复制黏贴。

所以这次还是整理了下,这样不用每次都要重新去搜索了。

SQL Server2000中使用convert来取得datetime数据类型样式(全)

日期数据格式的处理,两个示例

CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/

CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/
语句及查询结果:

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 18 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

说明:
使用 CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

参数
expression

是任何有效的 Microsoft® SQL Server™ 表达式。。 

data_type

目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。
length

nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。 

style

日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

不带世纪数位 (yy) 带世纪数位 (yyyy) 
标准 
输入/输出** 
– 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM) 
1 101 美国 mm/dd/yyyy 
2 102 ANSI yy.mm.dd 
3 103 英国/法国 dd/mm/yy 
4 104 德国 dd.mm.yy 
5 105 意大利 dd-mm-yy 
6 106 – dd mon yy 
7 107 – mon dd, yy 
8 108 – hh:mm:ss 
– 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM) 
10 110 美国 mm-dd-yy 
11 111 日本 yy/mm/dd 
12 112 ISO yymmdd 
– 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h) 
14 114 – hh:mi:ss:mmm(24h) 
– 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff] 
– 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff] 
– 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(不含空格) 
– 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM 
– 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM 


* 默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。
** 当转换为 datetime时输入;当转换为字符数据时输出。
*** 专门用于 XML。对于从 datetime或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 2。对于从 real 到 character 数据的转换,输出等同于 style 1。
****Hijri 是具有几种变化形式的日历系统,Microsoft® SQL Server™ 2000 使用其中的科威特算法。

 

重要 默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项("两位数字的截止年份"),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。


当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。

局域网Ping通Win7

周末在一次偶然的情况下,发现局域网中的Win7无法被PING通。

一开始以为是网络问题,遂检查网络,网络一切正常。

Win7可以访问外网,可以PING通主机,也可以PING通同网段的其他非Win7系统(一台XP),但是那台XP无法回PING通这台Win7。

接下来我通过services.msc关闭了Windows Firewall Service,仍旧不行。

上网搜索了一番后,发现应该是ICMP回显的问题。

原来,Win7默认情况下,处于安全因素的考虑,是不允许外机对其进行PING的测试。

所以我们只需要设置其允许即可。

 

1. 打开win7防火墙设置界面

2. 左边的菜单中选择 【高级设置

3. 在弹出的 【高级安全 Windows 防火墙】 界面,选择 【入站规则

4. 在中间的列表中找到 【 文件和打印机共享(回显请求 – ICMPv4-In) 】(  有2个 ), 右击选择【 启用规则 】即可  ,  如果使用的是IPV6, 则选择【 文件和打印机共享(回显请求 – ICMPv4-In) 】(  有2个 ), 右击选择【 启用规则 

图一:未启用

 

 

 

 

 

 

 

图二:启用 文件和打印机共享(回显请求 – ICMPv4-In) 规则

 

Delphi StringReplace – 替换字符函数

Delphi中的StringReplace函数是SysUtils单元中自带的函数,该函数可以替换字符串中的指定字符。

function StringReplace (const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

// rfReplaceAll:全部替换
// rfIgnoreCase:忽略大小写

// For Example:

var
    aStr: String;
begin
    aStr := 'This is a book, not a pen!';
    ShowMessage(StringReplace (aStr, 'a', 'two', []));//This is two book, not a pen!只替换了第一个符合的字
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));//This is two book, not two pen!替换了所有符合的字
    aStr := 'This is a book, not A pen!';
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));//This is two book, not A pen!只替换了符合的字(小写a)
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll, rfIgnoreCase]));//This is two book, not two pen!不管大小写替换了所有符合的字
end;
内存释放 内存泄漏

Delphi Create(nil), Create(self), Create(Application)的区别

最近的项目中经常在程序中动态创建控件,势必用到Create。

但是随之而来的问题就是动态创建的控件是否可以正确的释放内存?

以及 Create(nil), Create(self), Create(Application)的区别又是什么呢?

Create(nil);//需要自己释放
   
Create(Self);//当Self释放时自动触发释放

Create(Application);//当Application释放时自动释放

Create(nil);//这种方式创建的对象要自己手工进行FREE才会回收内存
//其他很多内存泄漏就是忘了手工释放内存

Create(Self);//由self对象负责释放创建的对象,只要self没有释放掉
//这个对象的内存就不会被释入掉,除程序员手工进行释放,他会触发很多事件。
//性能不是很好

Create(Application);
Create(Application.owner); //这两就是把self具体对象罢了

memory_overflow

SQL Server Rand函数 (随机数)

随机数: RAND

返回从 0 到 1 之间的随机 float 值。

语法: RAND ( [ seed ] )
seed
提供种子值的整数表达式(tinyint、smallint 或 int)。如果未指定 seed,则 Microsoft SQL Server 数据库引擎 随机分配种子值。对于指定的种子值,返回的结果始终相同。

随机数是我们经常会用到的,几乎所有的语言都支持产生随机数。而且函数都差不多。例如在VBA和VB中也是用RAND,在C#中用RANDOM等等

--由于没有设置seed值,所以每次Rand()出的值都是不同的随机Float
select RAND()
select RAND()
select RAND()

--指定seed数值后,产生的数值固定
select RAND(123)
select RAND(123)

mssql_rand

mssql_checksum

SQL Server CheckSum函数 (校验和值)

指定对表的所有列进行计算。如果有任一列是非可比数据类型,则 CHECKSUM 返回错误。
非可比数据类型有 text、ntext、image、XML 和 cursor,还包括以上述任一类型作为基类型的 sql_variant。

expression 
除非可比数据类型之外的任何类型的表达式。
返回值是int

CHECKSUM 对其参数列表计算一个称为校验和的哈希值。此哈希值用于生成哈希索引。如果 CHECKSUM 的参数为列,并且对计算的 CHECKSUM 值生成索引,则结果是一个哈希索引。它可用于对列进行等价搜索。

CHECKSUM 满足哈希函数的下列属性:在使用等于 (=) 运算符比较时,如果两个列表的相应元素具有相同类型且相等,则在任何两个表达式列表上应用的 CHECKSUM 将返回同一值。对于该定义,指定类型的 Null 值被作为相等进行比较。如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。但只在极少数情况下,校验和会保持不变。因此,我们不推荐使用 CHECKSUM 来检测值是否更改,除非应用程序可以容忍偶尔丢失更改。请考虑改用 HashBytes。指定 MD5 哈希算法时,HashBytes 为两个不同输入返回相同结果的可能性比 CHECKSUM 小得多。

表达式的顺序影响 CHECKSUM 的结果值。用于 CHECKSUM(*) 的列顺序是表或视图定义中指定的列顺序。其中包括计算列。

--校验固定字符和的哈希值
select CHECKSUM('abcdef')

--校验GUID和的哈希值
select CHECKSUM(NEWID())

mssql_checksum

mssql_newid

SQL Server NewID函数 (生成GUID)

SQL Server的主键需要唯一性,以便数据的检索。

一般使用36位的GUID或者自增长的Integer类型数字。

GUID是一个32位数字字符+4个'-'符号的,总共36位字符串,而且它不会重复。

从存储的空间节约来看,数字型占用更少的位数,而GUID占用的更多。

但是从移植性和全局唯一性来看,我更倾向于GUID(uniqueidentifier 类型),因为它不会重复。

在SQL SERVER中,使用内置函数NewID()来生成GUID字符串,如下:

select newid()

mssql_newid如图,生成了3个SQL SERVER GUID

同步MSSQL数据

特定条件下,同步两个SQL Server数据库数据

在同时使用多个SQL SERVER数据库的时候,经常需要两个数据库之间进行同步工作。

同步可以由SQL SERVER通过作业来自动完成,如下逻辑代码供参考:

--	INSERT INTO [172.29.11.212].FlexSFS.dbo.tbWorkOrder 
--	select * from tbWorkOrder where DateCreated>@THEDATE AND CodeWorkorder NOT IN 
--	(SELECT CodeWorkorder FROM [172.29.11.212].FlexSFS.dbo.tbWorkOrder WHERE DateCreated>@THEDATE)	
	
	--INSERT INTO tbPackage 
	--select * from [172.29.11.212].FlexSFS.dbo.tbPackage where DateCreated>@THEDATE AND CodePackage NOT IN 
	--(SELECT CodePackage FROM tbPackage WHERE DateCreated>@THEDATE)	
	
--	INSERT INTO [172.29.11.212].FlexSFS.dbo.tbPackage 
--	select * from tbPackage where DateCreated>@THEDATE AND CodePackage NOT IN 
--	(SELECT CodePackage FROM [172.29.11.212].FlexSFS.dbo.tbPackage WHERE DateCreated>@THEDATE)		
	
	--INSERT INTO tbHandOver 
	--select * from [172.29.11.212].FlexSFS.dbo.tbHandOver where DateCreated>@THEDATE AND CodeHandOver NOT IN 
	--(SELECT CodeHandOver FROM tbHandOver WHERE DateCreated>@THEDATE)	

--	INSERT INTO [172.29.11.212].FlexSFS.dbo.tbHandOver 
--	select * from tbHandOver where DateCreated>@THEDATE AND CodeHandOver NOT IN 
--	(SELECT CodeHandOver FROM [172.29.11.212].FlexSFS.dbo.tbHandOver WHERE DateCreated>@THEDATE)
	
	--INSERT INTO tbProduct 
	--select * from [172.29.11.212].FlexSFS.dbo.tbProduct where TimeCreated>@THEDATE AND CodeProduct NOT IN 
	--(SELECT CodeProduct FROM tbProduct WHERE TimeCreated>@THEDATE)	

--	INSERT INTO [172.29.11.212].FlexSFS.dbo.tbProduct 
--	select * from tbProduct where TimeCreated>@THEDATE AND CodeProduct NOT IN 
--	(SELECT CodeProduct FROM [172.29.11.212].FlexSFS.dbo.tbProduct WHERE TimeCreated>@THEDATE)	

 

同步MSSQL数据