2002.07.211,在单元中访问DPR文件:菜单栏Project-View Source。
RaiseLastWin32Error。2,WinExec替代函数 CreateProcess
BOOL CreateProcess(
LPCTSTR lpApplicationName, // pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
BOOL bInheritHandles, // handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);
-----------------------------------------------------------------------
参数 类型及说明
lpApplicationName String,要执行的应用程序的名字。可设为vbNullString;在这种情况下,应用程序的名字应在lpCommandLine参数的起始处出现lpCommandLine String,要执行的命令行。可用GetCommandLine函数取得一个进程使用的命令行。Windows会尽可能地根据下述搜索顺序来查找执行文件:
(1)包含了父进程执行文件的目录
(2)父进程当前的目录
(3)由GetSystemDirectory返回的系统目录
(4)仅适于windows NT:16位系统目录
(5)由GetWindowDirectory返回的Windows目录
(6)由PATH环境变量指定的目录lpProcessAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了进程的安全特性lpThreadAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了进程之主线程的安全特性bInheritHandles Long,TRUE表示允许当前进程中的所有句柄都由新建的子进程继承dwCreationFlags Long,来自API32.TXT文件的一个或多个下述常数之一,它们都带有前缀CREATE_。
CREATE_SEPARATE_WOW_VDM(仅适用于NT) 启动一个16位的Windows应用程序时,强迫它在自己的内存空间运行
CREATE_SHARED_WOW_VDM(仅适用于NT) 启动一个16位的Windows应用程序时,强迫它在共享的16位虚拟机(VM)内运行
CREATE_SUSPENDED 立即挂起新进程。除非调用了ResumeThread函数函数,否则它不会恢复运行
也可能是下述常数之一,用于指定优先级
IDLE_PRIORITY_CLASS 新进程应该有非常低的优先级——只有在系统空闲的时候才能运行。基本值是4
HIGH_PRIORITY_CLASS 新进程有非常高的优先级,它优先于大多数应用程序。基本值是13。注意尽量避免采用这个优先级
NORMAL_PRIORITY_CLASS 标准优先级。如进程位于前台,则基本值是9;如在后台,则优先值是7lpEnvironment Any,指向一个环境块的指针(环境缓冲区的头一个字符,或者环境块的地址)lpCurrentDriectory String,新进程的当前目录路径。调用函数的时候,可用vbNullString指定当前目录lpStartupInfo STARTUPINFO,指定一个STARTUPINFO结构,其中包含了创建进程时使用的附加信息lpProcessInformation PROCESS_INFORMATION,该结构用于容纳新进程的进程和线程标识符。大多数情况下,一旦这个函数返回,父应用程序都会关闭两个句柄。
-----------------------------------------------------------------------
例:
var
H: HWND;
PI: TProcessInformation;
SI: TStartupInfo;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
if CreateProcess(nil, 'Notepad', nil, nil, false, 0, nil, nil, SI, PI) then
begin
WaitForInputIdle(PI.hProcess, INFINITE);
H := FindWindow('Notepad', '未定标题-记事本');
if SetForeGroundWindow(H) then;
end
else
raise Exception.Create('');
end;3,Delphi提供了直接在Delphi程序中链接由其他编译器生成的OBJ文件的功能。可以通过$LINK 或$L将一个目标文件链接入你的Pascal程序中。如下:
{$L filename.obj}
在目标文件被链接后,必须对将在Pascal代码中使用的函数进行定义。使用external指示字可以指示编译器应该等到链接时再找函数名。
procedure foo; external;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2002.07.291,触发 ADO 连接串编辑器:
uses ADOconEd;ADOConnection1.Close;
if EditConnectionString(ADOConnection1) then
begin
ADOConnection1.GetTableNames(ComboBox1.Items, False);{不显示预定义的系统数据表}
{ADOConnection1.GetTableNames(ComboBox1.Items, True);取得所有数据表名}
end;2,建立索引:
Create Index IndexName On TableName(IndexField1,IndexField2,..)3,编译指令
→{$J-} 型態常數唯讀
不論是{$J+}或{$J-}, 以const VarName = const value; 定義的常數(沒有加上型別宣告), 是一個真正的常數, 其他的程式不可以改變其內容。
例:
{$J+}
const i: Integer = 1;
begin
i := 0;
end;
→{$WARNINGS ON} 編譯器警告
→{$T-} @指標型態檢查
→{$R檔案名稱} 資源檔
→{$U-} Pentium CPU浮點運算安全檢查
→{$Q-} 滿溢檢查, {$R-} 範圍檢查
→{$O+} 最佳化開關
→{$P+} 開放字串參數
→{$Z1} 最小列舉大小
→{$M 16386, 1048576} 記憶體配置大小
→{$H+} 長字串宣告
→{$L+} 區域符號資訊
→{$L檔案名稱} 連結目標檔
→{$I+} EInOutError檢查
→{$I檔案名稱} 含入檔案
→{$IMAGEBASE檔案基礎位址}
→{$IFOPT 開關}
→{$A+} 欄位對齊
→{$APPTYPE GDI} 應用程式型態
→{$B-} 布林評估
→{$D+} 除錯資訊
→{$DEFINE條件名稱} 定義條件名稱
→{$DESCRIPTION 描述內容}
→{$X+} 擴充語法
→{$HINTS OFF} 提示訊息4,渐变颜色
{ blue to black }
procedure TCyan.FormPaint(Sender: TObject);
var
i: word;
c,y: real;
begin
c := ClientHeight/256;
y := 0;
for i := 255 downto 0 do begin
canvas.Brush.Color := i * $10000;
canvas.FillRect(rect(0, round(y), ClientWidth, round(y + c)));
y := y + c;
end;
end;procedure TCyan.FormResize(Sender: TObject);
begin
FormPaint;
end;5,当使用ADO在分布式多层应用系统中存取数据时,不管这个多层应用系统是MIDAS的应用程序服务器还是使用MTS/COM+技术的多层应用系统,一定要尽量使用ADO本身的功能,让MIDAS负责数据的存取和修改数据的传递,而把最后修改数据回数据库的工作交由ADO来处理。6,
→双击窗体上的ADOQuery组件(或其他如ADODataSet),在Fields编辑列表中按Ctrl+F选择数据表所有字段(或右键单击选择)按住Shift键选中所有字段,然后把它们拖动至窗体,窗体上会自动为每个字段生成一个Label和绑定控件。
→利用临时表加快查询:
select * into #temptable from table1 innerjoin table2 on table1.field=table2.field
select * from #temptable7,发布基于MicroSoft SQL Server 的应用程序时,不安装SQL Server Client的做法:
→Step1:用Install Shield Express制作安装盘时,首先从系统目录下找到下列文件:
Dbmssocn.dll TCP/IP 支持文件
Dbmsspxn.dll IPX 支持文件
Dbnmpntw.dll 命名管道支持文件
Ntwdblib.dll SQLServer核心文件
然后在Fpecify Components and Files的Groups and Files中,将这几个文件添加到Program Files中去.
→Step2:修改注册表
HKEY_LOCAL_MACHINE\HKEY_LOCAL_MACHINE\SoftWare\MicroSoft\MSSQLServer\Client\ConnectTo 修改其键值为服务器别名。8,Windows启动时运行程序:修改注册表键值:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run。9,数据表的快速更新(适用于一次更新大量数据)
例:
if cdsMaster.ChangeCount > 0 then
begin
try
cdsMaster.DisableControls;//大量更新数据时提高更新速度
DataSource1.DataSet := nil;//同上
cdsMaster.ApplyUpdates(0);
cdsMaster.Refresh;
finally
cdsMaster.EnableControls;
DataSource1.DataSet := cdsMaster;
end;
end;
if cdsDetail.ChangeCount > 0 then
begin
try
cdsDetail.DisableControls;
DataSource2.DataSet := nil;
cdsDetail.ApplyUpdates(0);
finally
cdsDetail.EnableControls;
DataSource2.DataSet := cdsDetail;
end;
end;
注:cds开头的即ClientDataSet组件。
RaiseLastWin32Error。2,WinExec替代函数 CreateProcess
BOOL CreateProcess(
LPCTSTR lpApplicationName, // pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
BOOL bInheritHandles, // handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);
-----------------------------------------------------------------------
参数 类型及说明
lpApplicationName String,要执行的应用程序的名字。可设为vbNullString;在这种情况下,应用程序的名字应在lpCommandLine参数的起始处出现lpCommandLine String,要执行的命令行。可用GetCommandLine函数取得一个进程使用的命令行。Windows会尽可能地根据下述搜索顺序来查找执行文件:
(1)包含了父进程执行文件的目录
(2)父进程当前的目录
(3)由GetSystemDirectory返回的系统目录
(4)仅适于windows NT:16位系统目录
(5)由GetWindowDirectory返回的Windows目录
(6)由PATH环境变量指定的目录lpProcessAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了进程的安全特性lpThreadAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了进程之主线程的安全特性bInheritHandles Long,TRUE表示允许当前进程中的所有句柄都由新建的子进程继承dwCreationFlags Long,来自API32.TXT文件的一个或多个下述常数之一,它们都带有前缀CREATE_。
CREATE_SEPARATE_WOW_VDM(仅适用于NT) 启动一个16位的Windows应用程序时,强迫它在自己的内存空间运行
CREATE_SHARED_WOW_VDM(仅适用于NT) 启动一个16位的Windows应用程序时,强迫它在共享的16位虚拟机(VM)内运行
CREATE_SUSPENDED 立即挂起新进程。除非调用了ResumeThread函数函数,否则它不会恢复运行
也可能是下述常数之一,用于指定优先级
IDLE_PRIORITY_CLASS 新进程应该有非常低的优先级——只有在系统空闲的时候才能运行。基本值是4
HIGH_PRIORITY_CLASS 新进程有非常高的优先级,它优先于大多数应用程序。基本值是13。注意尽量避免采用这个优先级
NORMAL_PRIORITY_CLASS 标准优先级。如进程位于前台,则基本值是9;如在后台,则优先值是7lpEnvironment Any,指向一个环境块的指针(环境缓冲区的头一个字符,或者环境块的地址)lpCurrentDriectory String,新进程的当前目录路径。调用函数的时候,可用vbNullString指定当前目录lpStartupInfo STARTUPINFO,指定一个STARTUPINFO结构,其中包含了创建进程时使用的附加信息lpProcessInformation PROCESS_INFORMATION,该结构用于容纳新进程的进程和线程标识符。大多数情况下,一旦这个函数返回,父应用程序都会关闭两个句柄。
-----------------------------------------------------------------------
例:
var
H: HWND;
PI: TProcessInformation;
SI: TStartupInfo;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
if CreateProcess(nil, 'Notepad', nil, nil, false, 0, nil, nil, SI, PI) then
begin
WaitForInputIdle(PI.hProcess, INFINITE);
H := FindWindow('Notepad', '未定标题-记事本');
if SetForeGroundWindow(H) then;
end
else
raise Exception.Create('');
end;3,Delphi提供了直接在Delphi程序中链接由其他编译器生成的OBJ文件的功能。可以通过$LINK 或$L将一个目标文件链接入你的Pascal程序中。如下:
{$L filename.obj}
在目标文件被链接后,必须对将在Pascal代码中使用的函数进行定义。使用external指示字可以指示编译器应该等到链接时再找函数名。
procedure foo; external;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2002.07.291,触发 ADO 连接串编辑器:
uses ADOconEd;ADOConnection1.Close;
if EditConnectionString(ADOConnection1) then
begin
ADOConnection1.GetTableNames(ComboBox1.Items, False);{不显示预定义的系统数据表}
{ADOConnection1.GetTableNames(ComboBox1.Items, True);取得所有数据表名}
end;2,建立索引:
Create Index IndexName On TableName(IndexField1,IndexField2,..)3,编译指令
→{$J-} 型態常數唯讀
不論是{$J+}或{$J-}, 以const VarName = const value; 定義的常數(沒有加上型別宣告), 是一個真正的常數, 其他的程式不可以改變其內容。
例:
{$J+}
const i: Integer = 1;
begin
i := 0;
end;
→{$WARNINGS ON} 編譯器警告
→{$T-} @指標型態檢查
→{$R檔案名稱} 資源檔
→{$U-} Pentium CPU浮點運算安全檢查
→{$Q-} 滿溢檢查, {$R-} 範圍檢查
→{$O+} 最佳化開關
→{$P+} 開放字串參數
→{$Z1} 最小列舉大小
→{$M 16386, 1048576} 記憶體配置大小
→{$H+} 長字串宣告
→{$L+} 區域符號資訊
→{$L檔案名稱} 連結目標檔
→{$I+} EInOutError檢查
→{$I檔案名稱} 含入檔案
→{$IMAGEBASE檔案基礎位址}
→{$IFOPT 開關}
→{$A+} 欄位對齊
→{$APPTYPE GDI} 應用程式型態
→{$B-} 布林評估
→{$D+} 除錯資訊
→{$DEFINE條件名稱} 定義條件名稱
→{$DESCRIPTION 描述內容}
→{$X+} 擴充語法
→{$HINTS OFF} 提示訊息4,渐变颜色
{ blue to black }
procedure TCyan.FormPaint(Sender: TObject);
var
i: word;
c,y: real;
begin
c := ClientHeight/256;
y := 0;
for i := 255 downto 0 do begin
canvas.Brush.Color := i * $10000;
canvas.FillRect(rect(0, round(y), ClientWidth, round(y + c)));
y := y + c;
end;
end;procedure TCyan.FormResize(Sender: TObject);
begin
FormPaint;
end;5,当使用ADO在分布式多层应用系统中存取数据时,不管这个多层应用系统是MIDAS的应用程序服务器还是使用MTS/COM+技术的多层应用系统,一定要尽量使用ADO本身的功能,让MIDAS负责数据的存取和修改数据的传递,而把最后修改数据回数据库的工作交由ADO来处理。6,
→双击窗体上的ADOQuery组件(或其他如ADODataSet),在Fields编辑列表中按Ctrl+F选择数据表所有字段(或右键单击选择)按住Shift键选中所有字段,然后把它们拖动至窗体,窗体上会自动为每个字段生成一个Label和绑定控件。
→利用临时表加快查询:
select * into #temptable from table1 innerjoin table2 on table1.field=table2.field
select * from #temptable7,发布基于MicroSoft SQL Server 的应用程序时,不安装SQL Server Client的做法:
→Step1:用Install Shield Express制作安装盘时,首先从系统目录下找到下列文件:
Dbmssocn.dll TCP/IP 支持文件
Dbmsspxn.dll IPX 支持文件
Dbnmpntw.dll 命名管道支持文件
Ntwdblib.dll SQLServer核心文件
然后在Fpecify Components and Files的Groups and Files中,将这几个文件添加到Program Files中去.
→Step2:修改注册表
HKEY_LOCAL_MACHINE\HKEY_LOCAL_MACHINE\SoftWare\MicroSoft\MSSQLServer\Client\ConnectTo 修改其键值为服务器别名。8,Windows启动时运行程序:修改注册表键值:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run。9,数据表的快速更新(适用于一次更新大量数据)
例:
if cdsMaster.ChangeCount > 0 then
begin
try
cdsMaster.DisableControls;//大量更新数据时提高更新速度
DataSource1.DataSet := nil;//同上
cdsMaster.ApplyUpdates(0);
cdsMaster.Refresh;
finally
cdsMaster.EnableControls;
DataSource1.DataSet := cdsMaster;
end;
end;
if cdsDetail.ChangeCount > 0 then
begin
try
cdsDetail.DisableControls;
DataSource2.DataSet := nil;
cdsDetail.ApplyUpdates(0);
finally
cdsDetail.EnableControls;
DataSource2.DataSet := cdsDetail;
end;
end;
注:cds开头的即ClientDataSet组件。
解决方案 »
- 帮我写一下正则表达式
- 请教下VC下服务程序的系统托盘图标如何实现?
- 请求VC截屏代码,得快捷方式,以驱动的方式截屏最好哈。呵呵。
- Dll写内存中的自己占用的Memory,怎么可以实现呢?
- 急,问一个怎么取得EditBox的焦点的问题,是在窗口初始化的时候设置,用setfocus不行
- SkinMagic Toolkit怎么用啊
- CView 类的相关问题
- 请问在服务程序里如何得知用户是否登陆?
- ***如何让ListCtrl某一行处于选择状态(反显示)****
- 怎样删除一个为对话框定义的类,而不删除对话框本身?
- 某些网络程序有有网络设置的选项比如,局域网或者专线上网还有拨号设置,这个对程序有什么用?
- 如何获取并显示内存中的数值
在VCL中有一个封装了BLOB字段的TField派生对象-TBlobField,TBlobField
有一个TBlob Type类型的属性Blob Type,该属性用于表明保存于BLOB字段的数据类型。在DB单元中,TBlob Type的声明如下:
TBlobType = ftBlob..ftOraClob字段类型数据类型
ftBlob 无类型的或用户定义的数据类型
ftMemo 文本类型
ftGraphicWindows位图类型
ftFmtMemoParadox的格式化备注类型
ftParadoxOleParadox OLE对象类型
ftDBase OLE DBASE OLE 对象类型
ftTyped Binary 已存在类型的原始数据表示类型
ftCursor. . ftDataset 不是合法的BLOB类型
ftOraBlob Oracle 8表中的BLOB字段
ftOraClob Oracle 8表中的CLOB字段11,创建快捷方式到桌面:
uses ComObj;
procedure TCyan.MMCreateShortCutClick(Sender: TObject);
var
s1,s2: string;
procedure CreateShortcut( sName,sPath:string);
var
objShortcut, objShell: variant;
strDesk: string;
begin
objShell := CreateOleObject('Wscript.Shell');
strDesk := objShell.SpecialFolders.Item('Desktop');
objShortcut := objShell.CreateShortcut(strDesk + '\' + sName + '.lnk');
objShortcut.Targetpath := sPath;
objShortcut.Save;
objShell := UnAssigned;
objShortcut := UnAssigned;
end;
begin
if OpenDialog1.Execute then
begin
s1 := OpenDialog1.FileName;
s2 := GetFileName(s1);
s2 := Copy(s2, 0, Pos('.', s2) - 1);
CreateShortcut(S2, s1);
end;
end;{此处可用ExtractFileName()函数替换;}
function TCyan.GetFileName(var sFilePath: string): string;
var
i: integer;
s: string;
begin
i := Pos('\', sFilePath) + 1;
s := Copy(sFilePath, i, Length(sFilePath));
while Pos('\', s) <> 0 do
s := GetFileName(s);
result := s;
end;12,读写Ini文件
uses IniFiles;const sPath: PChar = 'C:\Cyan.ini';begin
MyIni := TIniFile.Create(sPath);
try
MyIni.WriteString('trc', 'Line1', 'cyan');//写,如不存在则创建文件
Edit1.Text := MyIni.ReadString('trc', 'Line1', '');//读
finally
MyIni.Free;
end;
end;13,改变PageControl控件TabSheet标题栏颜色:
→1)设置PageControl的OwnerDraw属性为True;
→2)在PageControl的OnDrawTab事件中添加:
var
yText: string;
yPoint: TPoint;
begin
with (Control as TPageControl).Canvas do
begin
Brush.Color := clred;//TabSheet的颜色
FillRect(Rect);
yText := TPageControl(Control).Pages[TabIndex].Caption;
with Control.Canvas do
begin
yPoint.x := (Rect.Right - Rect.Left) div 2 - TextWidth(yText) div 2;//因设置PageControl的OwnerDraw属性为True时TabSheet的标题也必须重画,
//如可以确认其坐标位置,此处可直接用TextOut()函数
yPoint.y := (Rect.Bottom - Rect.Top) div 2 - TextHeight(yText) div 2;
TextRect(Rect, Rect.Left + yPoint.x, Rect.Top + yPoint.y, yText);
end;
end;
end;14,SELECT_SQL语句的语法:
SELECT [ALL|DISTINCT] [TOP nExpr[PERCENT]]
[Alias.]Select-Item[AS Column_Name]
[,[Alias.]Select_Item[AS Column_Name]...]
FROM [FORCE]
[DatabaseName] Table [[AS] Local_Alias]
[[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER] JION
DatabaseName] Table [[AS] Local_Alias]
[ON JionCondition...]
[[INTO Destination]
|[TO FILE FileName[ADDITIVE]|TO PRINTER[PROMPT]
|TO SCREEN]]
[PREFERENCE PreferenceName]
[NOCONSOLE]
[PLAIN]
[NOWAIT]
[WHERE JionCondition[AND JionCondition...]
[AND|OR FilterCondition[AND|OR FilterCondition...]]]
[GROUP BY GroupColumn[,GroupColumn...]]
[HavING FilterCondition]
[UNION [ALL]SELECTCommand]
[ORDER BY Order_Item[ASC|DESC][,Order_Item[ASC|DESC]...]]
→分布
客户端应用程序:处理图形用户界面
处理用户输入
进行简单的计算和检查
调用应用程序服务器提供的
应用程序服务器:更新数据
执行企业法则
实际世界中的对象
进行逻辑判断
协调不同的对象
计算或提供公用服务
→取得COM/DCOM接口
var
iRoot: IUnkown;
vObj: IMyInterface;
sName: WideString;
vRole: IRoleInterface;
sRole: WideString;
begin
iRoot := CreateComObject(PorgIDToClassID('PsampleCom.MyInterface'));
vObj := iRoot as IMyInterface;
vObj.GetName(sName);
ShowMessage(sName);
vRloe := iRoot as IRoleInterface;
vRole.GetRole(sRole);
ShowMessage(sRole);
end;
→ADO组件设置
1),CacheSize属性 100-1000;
2),CrusorLocation通常情况下应设为clUseClient;
3),CurSorType几种设置执行效率差别不大;
4),Execute Options属性:是否异步执行方式;
5),LockType属性通常情况下应设定为ltBatchOptimistic或ltOptimistic;
6),DataSetProvider组件的ResolveToDataSet属性为True,则由应用程序服务器端的ADO组件更新数据,Options属性的PoAllowCommand属性决定是否可以在客户端对ClientDataSet组件执行SQL命令。
7),Master/Detail:连接Detail数据表的ClientDataSet组件的PacketRecords属性不可设为0。
8),在客户端的OnCreate中设置DCOMConnection组件的Connected属性为True;
9),不更新某个字段到数据表
在服务器端DataSetProvider组件的BeforeUpdateRecord事件中添加:
var
I: Integer;
begin
for I := 0 to DeltaDS.RecordCount - 1 do
begin
if (pfInUpdate in DeltaDS.FieldByName('ID').ProviderFlags) then
begin
DeltaDS.FieldByName('ID').ProviderFlags :=
DeltaDS.FieldByName('ID').ProviderFlags - [pfInUpdate];
end;
end;
end;
10),不要先运行应用程序服务器再设置客户端的TDCOMConnection组件的Connected属性为True,应通过其Connected属性设置自动运行应用程序服务器。
11),远程数据模块中:View-Type Library设置添加方法、接口等,选择Register Type Library注册,客户端调用:DCOMConnection.AppServer.Method()。
12)DBGrid.Columns[0].PickList属性 下拉选择
重载PickList:
procedure TForm1.ADOQ1AfterOpen(DataSet: TDataSet);
begin
AddPickList;
end;procedure TForm1.AddPickList;
var
I: Integer;
begin
dbg.Columns.RebuildColumns;
if ADOQ1.FieldCount > 3 then
if dbg.Columns[3].Title.Caption = sTitle then
begin
for I := 0 to 24 do
dbg.Columns[3].PickList.Add(sPickList[I]);
end;
end;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2002.08.06
→Midas远程调用,数据更新:
procedure TzjFrmEdit.ApplyDelta(cds: TClientDataSet);
var
iErrCount: Integer;
dspName: WideString;
vDisp: iMainRDMDisp; { Disp Interface }
vDelta, vOwner: OleVariant;
begin
//if cds.ChangeCount > 0 then
vDelta := cds.Delta;
vDisp := iMainRDMDisp(IDispatch(LocalDM.DCOMX.AppServer));
dspName := cds.ProviderName;
vDisp.AS_ApplyUpdates(dspName, vDelta, -1, iErrCount, vOwner);
end;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━部分内容参照
Steve Teixeira,Xavier Pacheco《Delphi5开发人员指南》
李维《Delphi 5.X ADO_MTS_COM+高级程序设计篇》
李维《Delphi 5.x分布式多层应用系统篇》
《Delphi5编程实例与技巧》
錢達智《編譯指令與說明》━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
√√√一郎认同√√√资源网站:
www.vcl.vclxx.org
www.id163.com
www.shuku.net梁艳:
→我对生命所赋予的一切,都心存感激。我能够看到,能够感知,能够自由的呼吸,还有幸从事着自己喜爱的职业,在乐趣中忘我工作,在工作中找寻快乐。
→关于生活
“宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒”
在这个缺憾的世界中,就有缺憾的人生。不裹足于失败,不痛苦于失去。人生,
不是活在别人眼中,而是活在自己心中。
→关于爱情
“得之,我幸;不得,我命。”
我希望与我所爱的人,携手走过一生。不管贫穷、疾病、痛苦、灾难,只要我们
能永远相依相伴。因为看重,所以谨慎。「 一郎 Email:[email protected] 」
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━