高手幫看看,為什麼我下面的語句執行會出錯,真煩啊,煩了我幾天了,怎麼DELHI的數據類型要求這麼嚴格啊?
怎麼改?謝。
說明:
MaxID:string;
Pcid:數據庫表中的自動編號
//取得SQL語句值的函數
function GetSql(Val:string;sqlstr:string):string;
begin
with DataM.q1 do
begin
DataM.q1.Close;
DataM.q1.Open;
sql.Clear;
sql.Add(sqlstr);
Open;
Result :=FieldByName(Val).AsString; //---------出錯的語句---------------
end
end; sq2:='select max(pcid)+1 as MaxID from pccon';
MaxId:=GetSql('MaxId',Sq2); ShowMessage(MaxID);
Abort;
怎麼改?謝。
說明:
MaxID:string;
Pcid:數據庫表中的自動編號
//取得SQL語句值的函數
function GetSql(Val:string;sqlstr:string):string;
begin
with DataM.q1 do
begin
DataM.q1.Close;
DataM.q1.Open;
sql.Clear;
sql.Add(sqlstr);
Open;
Result :=FieldByName(Val).AsString; //---------出錯的語句---------------
end
end; sq2:='select max(pcid)+1 as MaxID from pccon';
MaxId:=GetSql('MaxId',Sq2); ShowMessage(MaxID);
Abort;
把你的sql語句貼上來看看。
begin
DataM.q1.Close;
//DataM.q1.Open; //去掉这句
sql.Clear;
sql.Add(sqlstr);
Open;
Result :=FieldByName(Val).AsString; //---------出錯的語句---------------
end
begin
with DataM.q1 do
begin
Close;
sql.Clear;
sql.Add(sqlstr);
Open;
//这里楼主可以ShowMessage看看sql语句和RecordCount
Result :=FieldByName(Val).AsString;
end
end;
你提供的所有語句沒有任何問題。
改成
GetSql:=FieldByName(Val).AsString;
看看
Result :=FieldByName('MaxId').AsStringfunction GetSql(Val:string;sqlstr:string):string;改为
function GetSql(sqlstr:string):string;MaxId:=GetSql('MaxId',Sq2);改为
MaxId:=GetSql(Sq2);
我怀疑是FieldByName(Val).AsString中Val变量的问题,所以把字段变量先用固定的试试看
begin
Result := '';
with DataM.q1 do
begin
Close;
sql.Clear;
sql.Add(sqlstr);
Open;
if RecordCount > 0 then
Result := FieldByName(Val).AsString;
Close;
end
end;
function GetSql(Val:string;sqlstr:string):string;
begin
Result := '';
with DataM.q1 do
begin
Close;
sql.Clear;
sql.Add(sqlstr);
Open;
if RecordCount > 0 then
Result := Fields[0].AsString;
Close;
end
end;
可以不用你的第一个参数。如果从多个字段中选择,就把这个参数的类型改为integer;然后调用时
赋值就行了。0是第一个字段,1是第二个.....
第二:记录集里是否有Val字段。
Result := Fields[0].AsString;
Button Onlicked event:
var
strSql:string;
begin
strSql:='select Max([No])+1 as MaxID From tableName';
Edit1.text:=GetMaxID('MaxID',strSql);
end;
Function GetMaxID(MaxID,Sql:string):string;
var
strSql:string;
begin
Result:='';
strSql:=Sql;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(strSql);
try
Open;
except
showmessage('strSql run failure!')
Exit;
end;
end;
Result:=ADOQuery1.FieldByName(MaxID).value;
end;