線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2473
推到 Plurk!
推到 Facebook!

如何改成adoquery形式?

答題得分者是:小傑克
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-05 17:04:34 IP:122.235.xxx.xxx 訂閱




请教各位大大,下面这段code是用于query,可以用,但我想改成adoquery,却怎么也改不成,能否请大大帮忙碌,小弟先谢过了!

ps: 我已把那个paradox的资料库转为mssql中的table了,所以想用adoquery来实现



完整的檔案code : delphi.ktop.com.tw/download.php

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, DB, DBTables, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Query1: TQuery;
Panel1: TPanel;
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
Procedure FindLeechDom(Leechdomname: String;node: TTreeNode);
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FindLeechDom(Leechdomname: String;node: TTreeNode);
var
temp: TQuery;
node1: TTreeNode;
begin
Try
temp := TQuery.Create(Self);
temp.DatabaseName := ExtractFilePath(Application.ExeName);
With temp do
begin
Close;
SQL.Clear;
SQL.Add('select * from leechdom.db where 上级编码 = :Value');
ParamByName('value').AsString := Leechdomname;
Open;
end;
while Not Temp.Eof do
begin
node1 := TreeView1.Items.AddChild(node,temp.FieldByName('药品类别').AsString);
FindLeechDom(temp.FieldByName('药品类别').AsString,node1);
temp.Next;
end;
Finally
temp.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
temp: TTreeNode;
begin
if FileExists(ExtractFilePath(Application.ExeName) 'leechdom.db') then
begin
Query1.DatabaseName := ExtractFilePath(Application.ExeName);
With Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from leechdom.db');
Open;
end;
while not Query1.Eof do
begin
if Query1.FieldByName('上级编码').AsString = '' then
begin
temp := TreeView1.Items.AddChild(TreeView1.Items[0],Query1.FieldByName('药品类别').AsString);
FindLeechDom(Query1.FieldByName('药品类别').AsString,temp);
end;
Query1.Next;
end;
end;
end;
end.
編輯記錄
luowy651 重新編輯於 2009-03-05 17:06:54, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:07:16, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:12:55, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:15:38, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:20:52, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:23:26, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:24:55, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:28:14, 註解 無‧
luowy651 重新編輯於 2009-03-05 17:29:56, 註解 無‧
luowy651 重新編輯於 2009-03-05 22:50:45, 註解 無‧
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-05 18:01:47 IP:115.83.xxx.xxx 訂閱
paradox最好還是用BDE
好像不能用ADO連

ps.你的畫面好可愛
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-05 18:07:12 IP:118.169.xxx.xxx 訂閱
有問題的程式應該放在會員求助程式檔案上傳區
我幫您移過去了
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=97434
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-05 20:26:55 IP:219.82.xxx.xxx 訂閱
多谢frappe大大的关注
我已把那个paradox的资料库转为mssql中的table了,所以想用adoquery来实现
可我试了很多次,就是实现不了



===================引 用 frappe 文 章===================
paradox最好還是用BDE
好像不能用ADO連

ps.你的畫面好可愛
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-06 08:02:06 IP:59.112.xxx.xxx 訂閱
我不知道你說的怎樣也改不成是改了哪些,不過既然是ado ...是有一些要改的,我幫你標一下

不過我看你程式猜你應該還是用 query - BDE - Sqlserver 的架構, 你應該要放個TDataBase 不然你Query 連線都沒設定怎麼能跑...

===================引 用 luowy651 文 章==================

unit Unit1;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, DB, DBTables, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
temp: TQuery;
node1: TTreeNode;
begin
Try
temp.DatabaseName := ExtractFilePath(Application.ExeName); //你既然動態產生Query 當然要幫Query 設定連線...光Remark 是不行的 如果你用Query 應該要有個 TDataBase
With temp do
begin
Close;
SQL.Clear;
SQL.Add('select * from //Sql server 中 table 應該不會取名成這樣吧??
ParamByName('value').AsString := Leechdomname;
.......

end;
procedure TForm1.FormCreate(Sender: TObject);
var
temp: TTreeNode;
begin
if FileExists(ExtractFilePath(Application.ExeName) 'leechdom.db') then
begin
Query1.DatabaseName := ExtractFilePath(Application.ExeName);

With Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from leechdom.db');
Open;
end;
while not Query1.Eof do
begin
if Query1.FieldByName('上级编码').AsString = '' then
begin
temp := TreeView1.Items.AddChild(TreeView1.Items[0],Query1.FieldByName('药品类别').AsString);
FindLeechDom(Query1.FieldByName('药品类别').AsString,temp);
end;
Query1.Next;
end;
end;
end;
end.
------
額有朝天骨,眼中有靈光
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-06 14:36:07 IP:122.235.xxx.xxx 訂閱
感谢小傑克的回复,不过,我帖上来的code 本来就是基于bde和query的源程式,我所希望的,是把这个程式改成adoquery,我在改时是用ADOConnection1来连接的,连接也是成功的,可惜就是达不到图中的效果,而我帖上来的query程式却能达到


===================引 用 小傑克 文 章===================
我不知道你說的怎樣也改不成是改了哪些,不過既然是ado ...是有一些要改的,我幫你標一下

不過我看你程式猜你應該還是用 query - BDE - Sqlserver 的架構, 你應該要放個TDataBase 不然你Query 連線都沒設定怎麼能跑...

編輯記錄
luowy651 重新編輯於 2009-03-06 14:47:12, 註解 無‧
luowy651 重新編輯於 2009-03-06 14:54:22, 註解 無‧
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-06 19:17:17 IP:59.112.xxx.xxx 訂閱
如果你的結果只有最原始的那的Node 可能是轉sql 的關係, sql 有分nill 和 空白字串
印象中
SELECT * FROM LEECHDOM WHERE MCODE IS NULL
SELECT * FROM LEECHDOM WHERE MCODE =''
是不同的
------
額有朝天骨,眼中有靈光
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-09 20:22:49 IP:219.82.xxx.xxx 訂閱
非常感谢小傑克大大的侠义相助,问题得到圆满解决,小傑克大大修改后的程式下载链接如下:

http://www.4shared.com/file/91419056/a72fe7b6/test1.html


我把其中的code帖一下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function ConnectIonDataBase:Boolean;
function GetAdoQuery(sSql:String):TADOQuery;
Procedure FindLeechDom(Leechdomname: String;node: TTreeNode);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.ConnectIonDataBase: Boolean;
begin
// try connect adoConn to database
Result := false;
ADOConnection1.Close;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
ExtractFilePath( Application.ExeName) '\test1.mdb;Persist Security Info=False';
try
ADOConnection1.Open;
Result := true;
except
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var q:TADOQuery;
o,temp: TTreeNode;
begin
if ConnectIonDataBase then
begin
TreeView1.Items.Add(nil,'MTYPE');
q := GetAdoQuery('SELECT * FROM LEECHDOM WHERE MCODE IS NULL ');
while not q.Eof do
begin
temp := TreeView1.Items.AddChild( TreeView1.Items[0],q.FieldByName('MTYPE').AsString);
FindLeechDom(q.FieldByName('MTYPE').AsString ,temp);
q.Next;
end;
q.Close;
q.Free;
end;
end;
function TForm1.GetAdoQuery(sSql: String): TADOQuery;
var q:TADOQuery;
begin
try
q := TADOQuery.Create(nil);
q.Connection := ADOConnection1;
q.Close;
q.SQL.Text := sSql;
q.Open;
Result := q;
except
on E:Exception do
Raise e;
end;
end;
procedure TForm1.FindLeechDom(Leechdomname: String; node: TTreeNode);
var
temp: TADOQuery;
node1: TTreeNode;
begin
Try
temp :=GetAdoQuery('SELECT * FROM LEECHDOM WHERE MCODE=' QuotedStr(Leechdomname));
while Not Temp.Eof do
begin
node1 := TreeView1.Items.AddChild(node,temp.FieldByName('MTYPE').AsString);
FindLeechDom(temp.FieldByName('MTYPE').AsString,node1);
temp.Next;
end;
Finally
temp.Close;
temp.Free;
end;
end;

end.
系統時間:2024-05-08 9:02:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!