adoquerysql
① delphi程序在使用adoquery執行sql語句的時候,如何判斷SQL語句全部已經執行完成
在Delphi中進行字元變數連接相加時單引號用('''),又引號用('''')表示
首先定義變數
var
AnInt:integer=123;//為了方便在此都給它們賦初值。雖然可能在引賦初值在某些情況下不對
AnIntStr:string='456';
AStr:string='abc';
AFieldName: string='字元型編號';
ATableName: string='YourTable';
ADate:Tdatetime=now;
Adoquery1:tadoquery;
1,Delphi語句
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 字元型編號='abc' and 整型編號=123';
等價於
adoquery1.sql.text:=
'select '+AFieldName+' from '+ATableName+' where '+AFieldName
+'='''+AStr+''' and 整型編號='+AnIntStr;
也等價於
adoquery1.sql.text:=
'select '+AFieldName+' from '+ATableName+' where '+AFieldName
+'='+QuotedStr(AStr)+' and 整型編號='+Inttostr(AnInt);
傳到資料庫伺服器為:
select 字元型編號 from YourTable where 字元型編號='abc' and 整型編號=123
2,Delphi語句中日期表示
對於access資料庫:
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 日期型欄位=#2003-12-01#';
等價於:
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 日期型欄位=#'+FormatDateTime('yyyy-MM-dd',now)+'#';
傳到伺服器為:
select 字元型編號 from YourTable where 日期型欄位=#2003-12-01#
對於MSSQL資料庫:
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 日期型欄位='2003-12-01'';
等價於:
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 日期型欄位='''+FormatDateTime('yyyy-MM-dd',now)+'''';
也等價於:
等價於:
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 日期型欄位='+QuotedStr(FormatDateTime('yyyy-MM-dd',now));
傳到伺服器為:
select 字元型編號 from YourTable where 日期型欄位='2003-12-01'
日期欄位還可以這樣表示
Delphi語句
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 日期型欄位>='+QuotedStr(FormatDateTime('yyyy-MM-dd',now))
+' and 日期型欄位<='+QuotedStr(FormatDateTime('yyyy-MM-dd',now+1));//明天
等價於
adoquery1.sql.text:=
'select 字元型編號 from YourTable where 日期型欄位 between '+QuotedStr(FormatDateTime('yyyy-MM-dd',now))
+' and '+QuotedStr(FormatDateTime('yyyy-MM-dd',now+1));
如果用
adoquery1.sql.add();
形式又如何操作?請用Insert語句示例
adoquery1.sql.add(' insert into '+AtableName);
adoquery1.sql.add(' ( '+AFieldName+')');
adoquery1.sql.add(' values( '+quotedstr(AStr)+')');
② delphi 組件中adoquery組件的SQL語句如何用到變數
有幾種寫法
1、一種是拼sql語句:query.sql.text := 'select * from tb1 where id ='+quotetostr(edit1.text);
2、一種是寫成傳參數的形式:
query.sql.text := 'select * from tb1 where id=:@Value1';
query.Parameters.ParamByName('@Value').Value:= edit1.text;
後一種寫法的好處是你寫的時候不需要理會參數的數據類型,第一種寫法在參數類型多的時候經常需要改類型,而且經過本人實驗,在重復使用的時候,後面一種的執行效率更好。
③ Delphi中ADOQUERY的sql語句
現你寫的不就是嗎?
select * from tab where cname=:b
這樣就會產生一個參數。然後給參數賦值。
(關QUERY,參與賦值,開QUERY)
④ 用ADOQuery怎樣傳遞sql的參數呀
Parameters
.Value:=f_lf.edit1.textParameters
.Value......當然程序少了一些控制代碼,還是你自己具體情況具體分析吧
⑤ 通過ADOQuery的SQL語句改寫或者添加記錄
str:= '''1'',''2'',''3'',''4''';
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('insert into table1(ID,name,sex,age) values ('+str+')');
//sql.add('insert into table1(ID,name,sex,age) values (:sa)');
//Parameters.ParamByName('sa').value:='''1'',''2'',''3'',''4''';
execsql;
end;
可以用str生成語句,但無法用sa這種格式。
生成語句是不安全的。
⑥ 如何指定ADOQuery 的 SQL 屬性
如果動態加就這樣寫
ADOQuery
.sql.text:='select
*
from
表名'
如果靜態就在ADOQuery
屬性中的SQL中寫上你的查詢語句。
⑦ delphi用adoquery 執行兩個sql
var
sql1,sql2:String;
sql1
:=
'delete
from
'+edit9.text';
ss_sql:='FROM
OPENROWSET('+char(39)+'SQLOLEDB'+char(39)+','+char(39)+edit1.Text+char(39)+';'+char(39)+edit2.text+char(39)+';'+char(39)+maskedit1.Text+char(39)+',';
ss_sql:=ss_sql+char(39)+'SELECT
*
FROM
'+edit3.text+'.'+'dbo.'+edit8.text+'
where
InsertTime>='+ss_time+char(39)+')
as
a';
sql2
:='insert
into
'+edit9.text+'
select
a.*
'+
ss_sql;
try
sql.Text:=sql1;
//刪除
execsql;
sql.Text:=sql2;
//插入
execsql;
memo1.Lines.Append(datetimetostr(now)+'
成功復制['+ss_time+']以後數據!');
except
memo1.Lines.Append(datetimetostr(now)+'
復制['+ss_time+']以後數據失敗!');
end;
....
大致如上,樓上的
代碼
少了一行execsql;
而且是連個execsql最好是一塊放在try
except
中...
另外補充的是:
兩條
語句
一塊執行,建議加個事務,防止數據出現不完整..
⑧ 使用adoquery執行sql指令超時有什麼解決方法
查看執行計劃,如果是查詢語句本身比較慢,就想辦法優化查詢語句,但並不是所有的sql語句都可以優化,有的查詢語句已經是最優了,但還是執行時間很長,這時就要從數據結構方面去考慮了,數據記錄達到百萬級千萬級就要考慮拆分表,把表的文本欄位分出去等!