關於List index out of bounds(0)的問題 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223203333140.html
運行輸入資料按確定按鈕後,彈出對話方塊說List index out of bounds(0),為什麼會有這樣的錯誤呢。代碼如下:
unit Borrow;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Mask, DBCtrls, StdCtrls;
type
TBorrowForm = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
DBEdit1: TDBEdit;
Query1: TQuery;
Query2: TQuery;
Query3: TQuery;
Query4: TQuery;
DataSource1: TDataSource;
DataSource2: TDataSource;
DataSource3: TDataSource;
Label3: TLabel;
Label4: TLabel;
DBEdit2: TDBEdit;
Label5: TLabel;
DBEdit3: TDBEdit;
Label6: TLabel;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
BorrowForm: TBorrowForm;
implementation
uses Query, Return;
{$R *.dfm}
procedure TBorrowForm.Button1Click(Sender: TObject);
begin
if Edit1.Text=''then
ShowMessage('請輸入書號和讀者編號!')
else
if Edit2.Text='' then
else
begin
Query1.Params[0].AsString:=Edit1.Text;
Query1.ExecSQL;
Query1.Active:=true;
Query2.Params[0].AsString:=Edit2.Text;
Query2.ExecSQL;
Query2.Active:=true;
Query3.Params[0].AsString:=Edit2.Text;
Query3.ExecSQL;
Query3.Active:=true;
end;
end;
procedure TBorrowForm.Button2Click(Sender: TObject);
begin
if DBEdit4.Text='' then
showmessage('該書已借出,請選擇其他!')
else
begin
Query4.SQL.Clear;
Query4.SQL.Add('INSERT INTO 借閱 VALUES(Edit1.Text,Edit2.Text,SYSDATE)');
Query4.ExecSQL;
Query4.SQL.Clear;
Query4.SQL.Add('UPDATE 圖書 SET 借出否:=True WHERE 書號=Edit1.Text');
Query4.ExecSQL;
Query4.Close;
end;
end;
procedure TBorrowForm.Button3Click(Sender: TObject);
begin
QueryForm.show;
end;
procedure TBorrowForm.Button4Click(Sender: TObject);
begin
ReturnForm.show;
end;
procedure TBorrowForm.Button5Click(Sender: TObject);
begin
BorrowForm.Close;
end;
end.
天,你的命名太那個了吧...
不知道哪個是你的確定按鈕
這個錯誤是列表越界的通用提示,引用了一個空列表的值
再仔細找找原因
本人是菜鳥,請問"列表越界“是怎麼回事啊?
大俠門,幫我解決一下問題吧,感激不盡啊。
F8斷點調試吧
Query1.Params[0].AsString:=Edit1.Text;
Query2.Params[0].AsString:=Edit2.Text;
Query3.Params[0].AsString:=Edit2.Text;
---------------------------------------
問題出在你的Query1~Query3的參數中。 你確定每個QUERY的SQL中都帶有參數嗎?可以肯定的是至少有一個沒有帶參數。請檢查。把參數加上後一切就會大大的OK的。
還是老馮厲害,和我所見略同,呵呵。
老馮說得對! 先檢查一下SQL中是否有參數,
另外你的代碼有錯誤:
Query4.SQL.Add('INSERT INTO 借閱 VALUES(Edit1.Text,Edit2.Text,SYSDATE)');
Query4.ExecSQL;
Query4.SQL.Clear;
Query4.SQL.Add('UPDATE 圖書 SET 借出否:=True WHERE 書號=Edit1.Text');
Query4.ExecSQL;
Query4.Close;
Edit的值不能這樣引用到query4中,例如:Query4.SQL.Add('INSERT INTO 借閱 VALUES('''+Edit1.Text+''','+'''+Edit2.Text+''',SYSDATE)');
代碼中錯誤太多,像樓上各位說的。
還有ExecSql和Active := True不要亂用,也不要混用。
我在Query1~Query3都有參數了,分別是:
query1:
select * from 圖書 where 書號='+''''+Edit1.Text+'''
Query2:
select * from 讀者 where 編號='+''''+Edit1.Text+'''
Query3:
select str(count(*))+'本' from 借閱 where 讀者編號='+''''+Edit1.Text+'''
請問老馮,我的這些參數對嗎?
我的上面給的程式是實現圖書館管理系統中的借書功能。
錯了Query1~Query3的參數應該是:
query1:
select * from 圖書 where 書號='+''''+Edit1.Text+'''
Query2:
select * from 讀者 where 編號='+''''+Edit2.Text+'''
Query3:
select str(count(*))+'本' from 借閱 where 讀者編號='+''''+Edit2.Text+'''
請問,我的這些參數對嗎?
呵呵,你這樣是沒有參數啊。
難怪越界呢。一個參數也沒有。
還有SQL語句裡是沒有:=的。
Query4.SQL.Add('UPDATE 圖書 SET 借出否:=True WHERE 書號=Edit1.Text');
那請問怎麼設定參數呢?各位高手。