在這種情況下,我有一些代碼在現有程序中沒有問題,但在新程序中使用它時會拋出一個異常。這段代碼有什麼問題?
它可能不是最好的代碼,但它是工作在日常使用...
Function DoSQlCommandWithResultSet(const command : String;
AdoConnection : TADOConnection;
resultSet : TStringList): Boolean;
var i : Integer;
AdoQuery : TADOQuery;
begin
Result := True;
resultSet.Clear();
AdoQuery := TADOQuery.Create(nil);
try
AdoQuery.Connection := AdoConnection;
AdoQuery.SQL.Add(command);
AdoQuery.Open();
i := 0;
while not AdoQuery.eof do
begin
resultSet.Add(ADOQuery.Fields[i].Value);
AdoQuery.Next;
Inc(i);
end;
finally
AdoQuery.Free();
end;
end;
是的,它可能需要一個try/catch和布爾結果沒有被使用,但它工程...
....先前的方案,但在一個新的叫當thows異常...
procedure TForm1.FormCreate(Sender: TObject);
var my_stringlist : TStringList;
i : integer;
begin
AdoConnection := TADOConnection.Create(nil);
if ConnectToDefaultDatabase(AdoConnection) = False then
MessageDlg('Agh !', mtError, [mbOK], 0);
my_stringlist := TStringList.Create();
if DoSQlCommandWithResultSet('show databases', AdoConnection, my_stringlist) = False then
MessageDlg('Urk !', mtError, [mbOK], 0);
for i := 0 to Pred(my_stringlist.Count) do
memo1.Lines.Add(my_stringlist.Strings[i]);
end; // FormCreate()
現在,這裏的有趣的部分...它拋出例外Inc(i)
,如果我用for循環替換while循環...
for i := 0 to Pred(ADOQuery.Fields.count) do
resultSet.Add(ADOQuery.Fields[i].Value);
它工作得很好。
我想我可以使用for循環&繼續前進,但我想明白髮生了什麼問題....有人可以向我解釋嗎?由於
嗯,沒有評論,沒有答案和一個投票。讓我想知道他爲什麼低調。並且讓我想建議沒有解釋就不允許下調。這只是良好的禮儀,並可以從這樣的解釋 – Mawg
傾斜,你已經有2個答案... – Yahia
不是當時沒有評論downvoted,我沒有。我喜歡這個網站,但是有時候這個網站的運行和運行... – Mawg