DELPHI 调用存储过程报错:list index out of bounds(0)
With AdoDataset1 Do
Begin
Active:=False;
CommandType:=cmdStoredProc;
CommandText:='P_QUERY';
Parameters.Clear;
Parameters[0].Name:='@DATE1';
Parameters[0].Direction:=Pdinput;
Parameters[0].DataType:=ftstring;
Parameters.Refresh;
Parameters.ParamByName('@Date1').Value:=trim(Edit1.Text);
Parameters[1].Name:='@Date2';
Parameters[1].Direction:=Pdinput;
Parameters[1].DataType:=ftstring;
Parameters.Refresh;
Parameters.ParamByName('@DATE1').Value:=Trim(Edit2.Text);
Active:=True;
//Parameters.ParamByName('@Date1').Value:='2011-01-01';
//Parameters.ParamByName('@Date2').Value:='2011-02-27';
ExecuteOptions
With AdoDataset1 Do
Begin
Active:=False;
CommandType:=cmdStoredProc;
CommandText:='P_QUERY';
Parameters.Clear;
Parameters[0].Name:='@DATE1';
Parameters[0].Direction:=Pdinput;
Parameters[0].DataType:=ftstring;
Parameters.Refresh;
Parameters.ParamByName('@Date1').Value:=trim(Edit1.Text);
Parameters[1].Name:='@Date2';
Parameters[1].Direction:=Pdinput;
Parameters[1].DataType:=ftstring;
Parameters.Refresh;
Parameters.ParamByName('@DATE1').Value:=Trim(Edit2.Text);
Active:=True;
//Parameters.ParamByName('@Date1').Value:='2011-01-01';
//Parameters.ParamByName('@Date2').Value:='2011-02-27';
ExecuteOptions
解决方案 »
- 多台客户端通过idTcpClient向服务端发送信息后接收的问题。
- DLL封装MDI主窗体的问题,请高手指点?
- Setup Factory 7怎么打包Windows Service
- 关于dbgird的问题
- 如何快速的删除某文件夹下的一批特定后缀的文件!?
- 大家平时制作安装程序都用什么工具啊。来者有分,只想和大家讨论一下
- 不好意思,又来麻烦大家了:( 创建DBF表
- 为什么delphi用ADO调用ACCESS数据库,速度上就远不如VB用DAO调用ACCESS数据库?
- 两个问题,望赐教(100分)
- 有會做幫助文件的嗎? 幫助文件中圖片問題?? 急救!!!!!!!
- 【求助】 如何读写 自定义扩展名的文件类型
- Delphi新手,帮忙看个问题
2、你的代码中存在资源泄漏的可能:
...Create...
try
...
finally
...free...
end;
另外,你可能也很少使用调试方法或工具吧,你可以用这些知道你的错误具体位置,然后跟踪,然后修改,迭代下去
Parameters[0].Name:='@DATE1';//已经clear了,怎么对0进行赋值了,你需要add一个参数再赋值吧
ADOStoredProc1.ProcedureName:= 'total ';
ADOStoredProc1.Parameters.clear;
ADOStoredProc1.Parameters.createparam(,,,,);//创建参数
ADOStoredProc1.Parameters.ParamByName( '@begin_time ').value:=strtodatetime(datetostr(DateTimePicker1.Date)+ ' ' + timetostr(datetimepicker2.Time));
ADOStoredProc1.Parameters.createparam(,,,,);//创建参数,内容你自己填写吧。^_^
ADOStoredProc1.Parameters.ParamByName( '@end_time ').value:=strtodatetime(datetostr(datetimepicker3.Date)+ ' ' + timetostr(datetimepicker4.Time));
ADOStoredProc1.ExecProc ;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;type
TTestProcedures = Class (class(TForm)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
Selete: TButton;
Edit1: TEdit;
DBGrid1: TDBGrid;
GroupBox1: TGroupBox;
Select: TGroupBox;
Label1: TLabel;
GroupBox2: TGroupBox;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Insert: TButton;
ADOStoredProc1: TADOStoredProc;
GroupBox3: TGroupBox;
Edit4: TEdit;
Label4: TLabel;
Delete: TButton;
GroupBox4: TGroupBox;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Edit6: TEdit;
Label7: TLabel;
Edit7: TEdit;
Update: TButton;
procedure GetAll;
procedure SeleteClick(Sender: TObject);
procedure InsertClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DeleteClick(Sender: TObject);
procedure UpdateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
TestProcedures: TTestProcedures;implementation{$R *.dfm}procedure TTestProcedures.SeleteClick(Sender: TObject);
begin
with ADODataSet1 do
begin
Active:=false;
CommandType:=cmdStoredProc;
CommandText:='usp_selectone';
Parameters.Clear;
Parameters.AddParameter; Parameters[0].Name:='@id';
Parameters[0].Direction:= pdInput;
Parameters[0].DataType:=ftString;Parameters.Refresh;
Parameters.ParamByName('@id').Value:=Edit1.Text; Active:=true;
ExecuteOptions; end;
end;procedure TTestProcedures.InsertClick(Sender: TObject);
begin
try
AdoConnection1.BeginTrans;
with ADOStoredProc1 do
begin
Close;
ProcedureName:='usp_insertone';
Parameters.Refresh;
Parameters.ParamByName('@aaaaa').Value:=Edit2.Text;
parameters.ParamByName('@bbbbb').Value:=Edit3.text;
ExecProc;
end;
AdoConnection1.CommitTrans;
GetAll;
except
Adoconnection1.RollbackTrans;
end;
end;
procedure TTestProcedures.DeleteClick(Sender: TObject);
begin
try
AdoConnection1.BeginTrans;
with ADOStoredProc1 do
begin
close;
ProcedureName:='usp_deleteone';
Parameters.Refresh;
Parameters.ParamByName('@id').Value:=Edit4.Text;
ExecProc;
end;
Adoconnection1.CommitTrans;
GetAll;
except
Adoconnection1.RollbackTrans;
end;
end;procedure TTestProcedures.UpdateClick(Sender: TObject);
begin
try
AdoConnection1.BeginTrans;
with ADOStoredProc1 do
begin
close;
Procedurename:='usp_updateone';
Parameters.Refresh;
Parameters.ParamByName('@id').Value:=Edit5.Text;
Parameters.ParamByName('@aaaaa').Value:=Edit6.Text;
Parameters.ParamByName('@bbbbb').Value:=Edit7.Text;
ExecProc;
end;
AdoConnection1.CommitTrans;
GetAll;
except
adoconnection1.RollbackTrans;
end;
end;procedure TTestProcedures.FormShow(Sender: TObject);
begin
GetAll;
end;procedure TTestProcedures.GetAll;
begin
with ADODataSet1 do
begin
Active:=false;
CommandType:=cmdStoredProc;
CommandText:='usp_selectall';
Active:=true;
ExecuteOptions;
end;
end;
end.
SQL DBScript:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_deleteone]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[usp_deleteone]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_insertone]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[usp_insertone]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_selectall]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[usp_selectall]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_selectone]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[usp_selectone]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_updateone]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[usp_updateone]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[test]
GOCREATE TABLE [dbo].[test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[aaaaa] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bbbbb] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE PROCEDURE usp_deleteone
@id int
AS
delete from test where id = @idGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE PROCEDURE usp_insertone
@aaaaa varchar(50),
@bbbbb varchar(50)
AS
insert into test (aaaaa,bbbbb)values(@aaaaa,@bbbbb)GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE PROCEDURE usp_selectall
AS
select * from testGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE PROCEDURE usp_selectone
@id int
AS
SELECT aaaaa,bbbbb FROM test where id=@idGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE PROCEDURE usp_updateone
@id int,
@aaaaa varchar(50),
@bbbbb varchar(50)
AS
Update test set aaaaa=@aaaaa,bbbbb=@bbbbb where id=@idGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO