非常急的几个问题!(50分)

  • 主题发起人 主题发起人 jabmoon
  • 开始时间 开始时间
J

jabmoon

Unregistered / Unconfirmed
GUEST, unregistred user!
1.后端数据为Paradox,使用以下方法:
Query.SQL.Add('Delete From MyTable Where ... )
Query.SQL.Add('Insert Into MyTable() Values());
Query.ExecSQL;
出现错误,单独执行这两条语句完全正确,Paradox是否不支持Query中的多条SQL语句顺序执行?
2.模块以DLL形式存在,创建模块的主窗体的函数设置为外调函数,该外调函数由总控调用,以完成调用模块的功能,
为防止一个模块被多次调用,采用方法为:
if not Assigned(FormName) then Application.CreateForm(TFormName,FormName);
但有数个DLL形式的模块被设计为参数驱动,当传入不同的参数,同样调用该DLL,但取得的数据库中的数据不同,
这时要求该DLL可以被同时调用,但不同参数的调用仍然只能限制为一次,如何进行处理?
若采用FindWindow()函数,第一个参数传递什么?
3.函数FileExists()如何测试指定目录下的文件是否存在?
 
标准SQL是一次只能执行一条SQL语句。
要一次执行多条语句,需要使用DBMS的扩展SQL,或者使用其它工具。
 
2.你应该有一个管理动态模块的例程,用一个TStringList或其它类似的东东记录已经打开
的模块及其参数,每次打开模块之前检查要打开的模块及其参数是否已经存在与记录表中,
若已存在则直接使用,否则打开并加入记录表
3.传递文件完全路径名参数就行了呀
 
1.不支持,不能一次完成

2.
const classname='TForm1'; {声明为主窗体的类名}
var handle:integer; {变量}

begin
{-----------------主要为该判断部分----------------------}
handle:=findwindow(classname,nil);{查找是否有此类的窗体}
if handle<>0 then {不为0则程序已运行}
begin
messagebox(0,'该程序已经有一个在运行中!','运行',0);{提示程序已运行}
halt; {退出程序}
end;

3.if FileExist('C:/abc/123.txt') then showmessage('C:/abc/123.txt文件存在');
 
to 龙丹:
你的方法有个问题,当模块已经退出的时候,我必须将StringList中的该条记录去掉,但是我
采用的非模式窗体,总控是无法得知该模块的主窗体是何时释放的,如何操作StringList中的记录呢?

to 小人物:
你的方法有这样一个问题,我说得很明白了,我有模块相同,参数不同的情况,findwindow(classname,nil);
如果这样,这个类型的窗体我就只能创建一个了。
是否可以在其后加上窗体名(窗体名我可以创建为不同的名字)?
FindWindow()要求传递两个PChar类型的值,名称可以用PChar(Window.Title),类名如何传递?
 
2.
不如设置一个临界区,比如一个内存映象文件,
这样不同的进程都可以访问
其中的数据可如下结构:

ModuleID:integer;
ModuleParam:integer;

一个模块Create时,从中检索有无重复,
如有,返回错误码;
如无,把模块的编号及参数编号放到memfile中,
free时,再从memfile中清除,并整理memfile(就是一个队列的管理)
以上都在模块内完成

这样,
你也随时可以知道有多少模块以哪几种方式处于活动状态
 
1 、你是否忘换行了,例如:vb中使用
sql = "BEGIN TRAN"&vbCrLf(换行符)
sql = sql&"............."&vbCrLf
sql = sql&"COMMIT TRAN"
3、传递文件完全路径名参数即可
 
第二个问题仍旧没有解决,FindWindow总是返回0,请继续予以帮助
 
能不能把你的参数传到外面来判断?
 
The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.

HWND FindWindow(

LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);

FINDWINDOW举例:
var myhwnd:hwnd;

begin
myhwnd :=findwindow(nil,'计算器');
if myhwnd<>0 then
sendmessage(myhwnd,WM_CLOSE,0,0);
end;
 
我自己的模块管理就是采用我所说的方式.
从StringList中去掉是在重载窗口的DoClose方法中实现的
 
多人接受答案了。
 
后退
顶部