ADOQuery 400分(200分)

  • 主题发起人 主题发起人 dhdh
  • 开始时间 开始时间
D

dhdh

Unregistered / Unconfirmed
GUEST, unregistred user!
用ADOQuery查找SQL Server7.0里的數據.
寫一下完整代碼.
例: SQL里有Orders表單,表單有CustNo欄. 怎樣查找欄里的數據

 
ADOQuery1.Sql.Add('select * from Orders where CustNo')
 
where CustNo=XXX
hehe
 
不会这么简单吧?
 
完整點嗎。比如加ADOQuery.close 等等。
還有我想在Edit里輸入數據,就可以在DBGRID里找到相對應的數據。
我有450分,只要能編寫對就奉送450分(只給一人對的).
 
procedure TForm1.Edit1Change(Sender: TObject);
var
sql:string;
begin
sql:='select * from Orders where CustNo=' +Edit1.Text;
ADOQuery1.Close;
ADOQuery1.SQL.Add(sql);
ADOQuery1.Open;
end;
 
再发一次
procedure TForm1.Edit1Change(Sender: TObject);
var
sql:string;
begin
sql:='select * from Orders where CustNo="' +Edit1.Text+'"';//CustNo是字符型时加"
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sql);
ADOQuery1.Open;
end;
 
with ADOQuery do begin
Close;
SQL.Text:= 'SELECT * FROM ADatabase WHERE';
SQL.Add('Cust_No = :No');
Params.ParamByName('No').AsInteger:= No;

try
Open;
try
// 具体的读写操作
finally
Close;
end;
except
// Error
end
end;
 
xiecc很感謝你的熱情,但在Edit里輸入數據就出現錯誤.很遺憾.
你可以運行一下看看.
fatBaby也很感謝你,你都考慮到出錯語句.但是也不行.
能不能你們再修改一下語句.
 
>xiecc很感謝你的熱情,但在Edit里輸入數據就出現錯誤.很遺憾
>procedure TForm1.Edit1Change(Sender: TObject);

我觉得这些查询代码不应该在Edit1Change事件里编写,而应该

在Edit1Exit事件里(即编辑框失去焦点时).
 
xiecc很感謝你的熱情,但在Edit里輸入數據就出現錯誤.很遺憾.
你可以運行一下看看.
fatBaby也很感謝你,你都考慮到出錯語句.但是也不行.
能不能你們再修改一下語句.
 
怎么能在OnChange是建立里面写这个代码? 你的数据库不是要忙死了?
最起码应该判断输入回车键的时候表示确认吧/
 
上面的程序我是国都没有问题,
单真的不应该在onChange里写代码
 
我沒有放在EditChang里,而是放在了BottonClick控件里.
上面的編碼只能對數字輸入有效.
而sql:='select * from Orders where CustNo="' +Edit1.Text+'"';//
編碼不知道怎麼輸入文字後點擊Botton就出現錯誤.
我都用過CustNo=:Edit1.Text,CustNo like 'Edit1.text'就是不行.
可能符號上有問題.
 
现提供几种方法:
前提是ADOQuery已经连接好数据库即:ADOQuery。ConnectionString或者ADOQuery.Connection已经建立好。

一、静态SQL语句:直接在ADOQuery的SQL中输入,如:select * from orders where CustNo=:CustNo
再用ADOQuery的参数对其赋值:ADOQuery.parameters.ParaByName('CustNo').AsString := Edit1.Text;
二、动态SQL语句:
with ADOQuery do
begin
if Active Then Close;
SQL.Clear;
SQL.Add('select * from orders where CusNo='''+Edit1.Text+'''');
Open;
end;
三、客户应用服务器方式:
在服务器端也同样有上面两种方式,不过在客户端有些不一样。客户端使用
TClientDataSet来连接到服务器端的DataSetProvider,而DataSetProvider又是连接到
ADOQuery。所以在客户端两种方法:
3、1 静态SQL:在服务器端的ADOQuery加入,客户端为:
with ClientDataSet1 do begin
if Active then Close;
parameters.ParamByName('CustNo').Values:=Edit1.Text
Execute;
end;
3、2 动态SQL,这时候在服务器端的DataSetProvider的Options项中应将poAllowCommandText:= True
with ClientDataSet1 do begin
if Active then Close;
CommandText := 'select * from orders where CustNo='''+Edit1.Text+'''';
Execute;
end;

以上三种方法不知合不合你的胃口!
注意的是:在上面所有的语句中,引号都是单引号!!
 
抱歉,没看清题目上说的 Orders 表单。你再试试下面的程序,
如果再出错,不妨说一下显示出来的错误提示信息,让大家一起
研究研究错在哪里

with ADOQuery do begin
Close;
SQL.Text:= 'SELECT * FROM [Orders] WHERE';
SQL.Add('Cust_No = :No');
Params.ParamByName('No').AsInteger:= No;

try
Open;
try
// 具体的读写操作
finally
Close;
end;
except
On E: EDatabaseError do begin
ShowMessage(M.Message);
end;
On E: EOleException do begin
ShowMessage(M.Message);
end;
end
end;
 
补充很关键的一点:
我觉得不能象几位一样用 SQL.Add('select * from orders where CusNo='''+Edit1.Text+'''';
的写法,
我以前也用类似的写法,后来出了一个莫名其妙的错,检查发现是 Edit1.Text 的内容
中有一个单引号所至,所以为了避免此类问题,我从那时以后就一直用 Params 的参数
传递来导入参数。
 
很抱歉xiecc的符號錯誤,而fatBaby的編碼中No和params是指甚麼我不清楚,我也盡力修改
試過,但還是不行.
只有zengr的運行就成功啦.
From:一諾千金
 
Hi zengr. 我不知道怎樣一下給450分,所以我會提出兩個問題,你就看一下就是你的啦.
 
好的。但没见问题的啊
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
I
回复
0
查看
800
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部