我需要读取Access 2003数据库中超过100个表的属性,并将这些详细信息 - 表名,字段名,类型和大小 - 写入文件以获取进一步的文档.
我无法通过网络搜索找到有关阅读字段属性,只是字段值...
有人可以告诉我,我必须声明什么记录集变量(和语法)循环数据库中的所有表,并从每个表中提取字段名称,类型和大小?我将结果写入文本文件,但我想我可以处理!:)
我陷入停顿,直到我能解决这个问题.我花了一天时间手动记录两张表.有些表格有100多个字段.
我正在使用Delphi 5,我在运行时创建了许多面板,然后在面板上创建按钮,显然在运行时再次创建.我需要这样做,因为我可能需要在将来动态创建更多的面板/按钮组合.
我可以做到这一切,但我不知道如何引用我创建的面板,因为我找不到访问面板组件名称的方法.在互联网上狩猎我发现我可以使用FindComponent按名称查找面板组件,但我仍然不知道如何使用该名称,因为我不能使用字符串变量来引用它 - 例如StringVar := Panel.Name.我得到一个类型不匹配,TComponentName与String.
我在创建面板时为每个面板创建了按钮.简化,它看起来像这样:
With TypeQuery do begin // Create Panels
First;
While (not eof) do begin // create the actual panel
panelno := FieldByName('Product_type_id').AsInteger;
pnl := Tpanel.Create(Self);
pnl.name := FieldByName('PanelName').AsString;
pnl.color := clInactiveCaption;
pnl.parent := MainForm;
pnl.width := 365;
pnl.Height := 551;
pnl.left := 434
pnl.top := 122;
pnl.caption := '';
With ButtonQuery do begin
Close;
Parameters.parambyname('PanelID').Value := PanelNo;
Open;
First;
While (not eof) and (FieldByName('Product_type_id').AsInteger = PanelNo) do begin //put the buttons on it. …Run Code Online (Sandbox Code Playgroud) 我只知道这很简单,但我已经尝试了我在这个论坛上找到的所有建议,而且我仍然无法获得以下ShellExecute语句,这些语句在XP上工作了四年,在Windows中工作7.
任何建议都感激不尽!
ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c ftp -s:c:\checkout\WebFTPParams.txt 91.208.99.4'), Nil, SW_SHOW);
ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c ftp -s:c:\checkout\WWFTPParams.txt 212.78.232.39'), Nil, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)
不管怎样,谢谢伙计,但我发现了问题.我应该一直在使用CMD.EXE而不是旧的Command.com.对不起,打扰你!
这很奇怪.我现在在我全新的Windows 7 64位机器上安装了Delphi 5,更新到Service Pack 1.它看起来运行得很好,但是当我启动时会出现一条错误消息,告诉我系统无法将Delphi32.$$$重命名为Delphi32.dro.我想"好的"然后手动重命名,结果却发现没有Delphi32.$$$但是那里有很大的生命,是Delphi32.dro ......
我已登录到管理员级帐户,因此我认为这不是权限问题.
我愿意忍受这种轻微的烦恼,但我担心这是一些更深层次问题的症状.
有人遇到过这种情况么?
我有一些简单的代码问题我根本无法解决.我正在使用Delphi 5并应用了所有更新.
我有这个代码块:
procedure TForm1.LoadBtnClick(Sender: TObject);
var
s1, s2, s3 : Textfile;
sa, sb, RString, SQLString : string;
begin
with sourcequery do begin
Close;
SQL.Clear;
SQL.Add('delete * from source');
ExecSQL;
Close;
AssignFile(S2, 'c:\delphi programs\events\source1.txt');
AssignFile(S1, 'c:\delphi programs\events\source2.txt');
Reset(s2);
Reset(s1);
while not eof(s1) do begin
readln(s1, RString);
SQLString := 'insert into source1(f1, f2) values(';
SQLstring := SQLString+ QuotedStr(copy(Rstring, 1, pos(chr(9), Rstring)-1))+', ';
SQLString := SQLString+QuotedStr(copy(Rstring, pos(chr(9),Rstring)+1,length(Rstring)))+')';
with sourcequery do begin
close;
SQL.Clear;
SQL.Add(SQLString);
ExecSQL;
end;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时,它会在"eof("之后停止:
while not …Run Code Online (Sandbox Code Playgroud) 我创建了一个登录表单,其中包含与 Access 文件中保存的用户名相对应的按钮。按钮是在OnCreate事件中创建的,因为我不想每次显示屏幕时都必须创建它们。
按钮按预期显示,并且我创建了 LogOn 和 LogOff 过程,它们都按我的预期工作。
下一步是仅显示当前登录到系统的用户的按钮。为此,我在OnActivate事件中创建了以下代码:
procedure TUserInForm.FormActivate(Sender: TObject);
var
btn : TLBButton;
begin
With UserQuery do begin;
first;
while (not eof) do begin
BtnName := FieldByName('UserName').AsString;
Btn := TLBButton(FindComponent(BtnName));
if (Btn <> nil) then
if (FieldByName('LoggedIn').AsBoolean = True) then Btn.Visible := True else Btn.Visible := False;
next;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,它没有找到任何按钮——它们都是nil. 如果我删除nil检查,代码将引发访问冲突异常。但是,在代码中的任何一点我都不会破坏按钮或表单本身。按钮存在,因为我可以在表单上看到它们。该BtnName变量在单元内是全局的。我已经检查过该BtnName变量是否从表中正确填充。
我以前使用过类似的代码来查找组件,没有任何问题。事实上,我从另一个运行良好的过程(有明显的变化)“窃取”了上面显示的代码。日志显示没有错误。
任何人都可以提出一些解决此问题的方法吗?这很令人沮丧!
delphi ×5
delphi-5 ×2
windows-7 ×2
access-vba ×1
components ×1
ms-access ×1
reference ×1
runtime ×1
shellexecute ×1
text-files ×1