我想将delphi内所有SQL操作都封装成一个单元,查询操作封装为一个函数并返回二维数组。
代码如下:unit dbLink;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,DB,ADODB;
type
TStrArr=array of string;
SecArr=array of array of string;
function dbOpertor(sql:string;rvalue:TStrArr):SecArr;//sql为查询语句,rvalue为要查询的字段数组
//当我写成 function dbOpertor(sql,rvalue:string):TStrArr;
function dbInsert(isql:string):boolean;
implementation
uses dataMod;
function dbOpertor(sql:string;rvalue:TStrArr):SecArr;//function dbOpertor(sql,rvalue:string):TStrArr;
var i,j,k:Integer;
arr:SecArr;//arr:TStrArr
begin
if dataMod.DataModule1.ADOcon.Connected then //现在函数数据库连接这里报错,但是我用一维数组返回时不报错
begin
dataMod.DataModule1.ADOquery.Close;
dataMod.DataModule1.ADOquery.SQL.Clear;
dataMod.DataModule1.ADOquery.SQL.Add(sql);
dataMod.DataModule1.ADOquery.Open;
i:=0;
j :=dataMod.DataModule1.ADOquery.RecordCount;
showMessage(IntToStr(j));
while not dataMod.DataModule1.ADOquery.Eof do
begin
SetLength(arr,j);
//------下面是我对返回二维数组的操作
for k:=Low(rvalue) to High(rvalue) do
arr[i][k] :=dataMod.DataModule1.ADOquery.FieldByName(rvalue[k]).AsString;
//------下面是我对返回一维数组的操作
{arr[i] :=dataMod.DataModule1.ADOquery.FieldByName(rvalue[k]).AsString;}
dataMod.DataModule1.ADOquery.Next;
inc(i);
end;
Result :=arr;
end
else
showMessage('数据库连接失败'); end;请问各位大侠,这是什么原因呢?报的是不能连接数据库的内存错误!
代码如下:unit dbLink;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,DB,ADODB;
type
TStrArr=array of string;
SecArr=array of array of string;
function dbOpertor(sql:string;rvalue:TStrArr):SecArr;//sql为查询语句,rvalue为要查询的字段数组
//当我写成 function dbOpertor(sql,rvalue:string):TStrArr;
function dbInsert(isql:string):boolean;
implementation
uses dataMod;
function dbOpertor(sql:string;rvalue:TStrArr):SecArr;//function dbOpertor(sql,rvalue:string):TStrArr;
var i,j,k:Integer;
arr:SecArr;//arr:TStrArr
begin
if dataMod.DataModule1.ADOcon.Connected then //现在函数数据库连接这里报错,但是我用一维数组返回时不报错
begin
dataMod.DataModule1.ADOquery.Close;
dataMod.DataModule1.ADOquery.SQL.Clear;
dataMod.DataModule1.ADOquery.SQL.Add(sql);
dataMod.DataModule1.ADOquery.Open;
i:=0;
j :=dataMod.DataModule1.ADOquery.RecordCount;
showMessage(IntToStr(j));
while not dataMod.DataModule1.ADOquery.Eof do
begin
SetLength(arr,j);
//------下面是我对返回二维数组的操作
for k:=Low(rvalue) to High(rvalue) do
arr[i][k] :=dataMod.DataModule1.ADOquery.FieldByName(rvalue[k]).AsString;
//------下面是我对返回一维数组的操作
{arr[i] :=dataMod.DataModule1.ADOquery.FieldByName(rvalue[k]).AsString;}
dataMod.DataModule1.ADOquery.Next;
inc(i);
end;
Result :=arr;
end
else
showMessage('数据库连接失败'); end;请问各位大侠,这是什么原因呢?报的是不能连接数据库的内存错误!
if dataMod.DataModule1.ADOcon.Connected then //现在函数数据库连接这里报错,但是我用一维数组返回时不报错
begin
dataMod.DataModule1.ADOquery.Close;
dataMod.DataModule1.ADOquery.SQL.Clear;
dataMod.DataModule1.ADOquery.SQL.Add(sql);
dataMod.DataModule1.ADOquery.Open;
i:=0;
j :=dataMod.DataModule1.ADOquery.RecordCount;
showMessage(IntToStr(j));
while not dataMod.DataModule1.ADOquery.Eof do
begin
SetLength(arr,j);
//------下面是我对返回二维数组的操作
for k:=Low(rvalue) to High(rvalue) do
arr[i][k] :=dataMod.DataModule1.ADOquery.FieldByName(rvalue[k]).AsString;
//------下面是我对返回一维数组的操作
{arr[i] :=dataMod.DataModule1.ADOquery.FieldByName(rvalue[k]).AsString;}
dataMod.DataModule1.ADOquery.Next;
inc(i);
end;
Result :=arr;
end
else
showMessage('数据库连接失败');
except
showmessage('数据库连接失败');
end;
是这里报错的吗? 如果是的 应该不是datamodule1没创建就是adocon没创建。