操作系统:WIN2003
开发环境:CodeGear RAD Studio+SQLSERVER2000及ACCESS
问题描述:我想将SQLSERVER2000的数据导入到ACCESS中提示错误
思路:先建立一个MDB文件,然后在这个MDB文件中建入表,使用SQL语句插入数据。
procedure TFrm.K31Click(Sender: TObject);
const ProviderStr='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=';
{var CardNo,TruckNo:String;
FirstWeight:Double;
ProductCode:Integer; //产品代码
FirstDate:TDateTime;
FSupplier:Integer;//供应商代码
FEmp:Integer;//职工代码
Department:Integer;//部门代码
InterID:Integer;//通知单内码}
begin
if SaveDialog1.Execute then
CreateAccessFile(SaveDialog1.FileName,'') ;
with ADOCBAK do
begin
if not Connected then
begin
ConnectionString :=ProviderStr+SaveDialog1.FileName;
Connected:=true;
end;
end;
with ADOQBAK do
begin
Close;
SQL.Clear;
SQL.Add('CREATE TABLE 地磅数据 (编号 INT,卡号 string,[日期] DateTime,车牌号码 String,');
SQL.Add('供应商代码 int,物料代码 int,第一称重 Float,操作员 int,操作部门 int)');
Connection:=ADOCBAK;
ExecSQL;
Close;
SQL.Clear;
while not ADOQ1.Eof do
begin
ADOQ1.First;
SQL.Add('Insert into 地磅数据(编号,卡号,日期,车牌号码,供应商代码,物料代码,第一称重,操作员,操作部门);');
SQL.Add('Values( ');
SQL.Add('(:InterID_1,:CardNO_1,:FirstDate_1,:TruckNo_1,:FSupplier_1,:ProductCode_1,:FirstWeight_1,:FEmp_1,:Department_1)');
Parameters.Clear;
Parameters.Add;
ParamCheck:=true;
Parameters[0].Name:='InterID_1';
Parameters[0].DataType:=ftInteger;
Parameters[1].Name:='CardNO_1';
Parameters[1].DataType:=ftString;
Parameters[2].Name:='FirstDate_1';
Parameters[2].DataType:=ftDateTime;
Parameters[3].Name:='TruckNo_1';
Parameters[3].DataType:=ftString;
Parameters[4].Name:='FSupplier_1';
Parameters[4].DataType:=ftInteger;
Parameters[5].Name:='ProductCode_1';
Parameters[5].DataType:=ftInteger;
Parameters[6].Name:='FirstWeight_1';
Parameters[6].DataType:=ftFloat;
Parameters[7].Name:='FEmp_1';
Parameters[7].DataType:=ftInteger;
Parameters[8].Name:='Department_1';
Parameters[8].DataType:=ftInteger;
Parameters.ParamByName('InterID_1').Value:=ADOQ1.FieldByName('编号').Value;
Parameters.ParamByName('CardNO_1').Value:=ADOQ1.FieldByName('卡号').Value;
Parameters.ParamByName('FirstDate_1').Value:=ADOQ1.FieldByName('日期').AsDateTime;
Parameters.ParamByName('TruckNo_1').Value:=ADOQ1.FieldByName('车牌号码').AsString;
Parameters.ParamByName('FSupplier_1').Value:=ADOQ1.FieldByName('供应商代码').AsInteger;
Parameters.ParamByName('ProductCode_1').Value:=ADOQ1.FieldByName('物料代码').AsInteger;
Parameters.ParamByName('FirstWeight_1').Value:=ADOQ1.FieldByName('第一称重').AsFloat;
Parameters.ParamByName('FEmp_1').Value:=ADOQ1.FieldByName('操作员').Value;
Parameters.ParamByName('Department_1').Value:=ADOQ1.FieldByName('操作部门').AsInteger;
Parameters.ParseSQL(SQL.Text,TRUE);
ADOQBAK.ExecSQL;
end;
ADOQ1.Next;
end;
end;
提示:“List Index Out Of Bounds(1)”不知道是哪里错了,请各位大虾帮忙看看已经两天了还没有查出问题
开发环境:CodeGear RAD Studio+SQLSERVER2000及ACCESS
问题描述:我想将SQLSERVER2000的数据导入到ACCESS中提示错误
思路:先建立一个MDB文件,然后在这个MDB文件中建入表,使用SQL语句插入数据。
procedure TFrm.K31Click(Sender: TObject);
const ProviderStr='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=';
{var CardNo,TruckNo:String;
FirstWeight:Double;
ProductCode:Integer; //产品代码
FirstDate:TDateTime;
FSupplier:Integer;//供应商代码
FEmp:Integer;//职工代码
Department:Integer;//部门代码
InterID:Integer;//通知单内码}
begin
if SaveDialog1.Execute then
CreateAccessFile(SaveDialog1.FileName,'') ;
with ADOCBAK do
begin
if not Connected then
begin
ConnectionString :=ProviderStr+SaveDialog1.FileName;
Connected:=true;
end;
end;
with ADOQBAK do
begin
Close;
SQL.Clear;
SQL.Add('CREATE TABLE 地磅数据 (编号 INT,卡号 string,[日期] DateTime,车牌号码 String,');
SQL.Add('供应商代码 int,物料代码 int,第一称重 Float,操作员 int,操作部门 int)');
Connection:=ADOCBAK;
ExecSQL;
Close;
SQL.Clear;
while not ADOQ1.Eof do
begin
ADOQ1.First;
SQL.Add('Insert into 地磅数据(编号,卡号,日期,车牌号码,供应商代码,物料代码,第一称重,操作员,操作部门);');
SQL.Add('Values( ');
SQL.Add('(:InterID_1,:CardNO_1,:FirstDate_1,:TruckNo_1,:FSupplier_1,:ProductCode_1,:FirstWeight_1,:FEmp_1,:Department_1)');
Parameters.Clear;
Parameters.Add;
ParamCheck:=true;
Parameters[0].Name:='InterID_1';
Parameters[0].DataType:=ftInteger;
Parameters[1].Name:='CardNO_1';
Parameters[1].DataType:=ftString;
Parameters[2].Name:='FirstDate_1';
Parameters[2].DataType:=ftDateTime;
Parameters[3].Name:='TruckNo_1';
Parameters[3].DataType:=ftString;
Parameters[4].Name:='FSupplier_1';
Parameters[4].DataType:=ftInteger;
Parameters[5].Name:='ProductCode_1';
Parameters[5].DataType:=ftInteger;
Parameters[6].Name:='FirstWeight_1';
Parameters[6].DataType:=ftFloat;
Parameters[7].Name:='FEmp_1';
Parameters[7].DataType:=ftInteger;
Parameters[8].Name:='Department_1';
Parameters[8].DataType:=ftInteger;
Parameters.ParamByName('InterID_1').Value:=ADOQ1.FieldByName('编号').Value;
Parameters.ParamByName('CardNO_1').Value:=ADOQ1.FieldByName('卡号').Value;
Parameters.ParamByName('FirstDate_1').Value:=ADOQ1.FieldByName('日期').AsDateTime;
Parameters.ParamByName('TruckNo_1').Value:=ADOQ1.FieldByName('车牌号码').AsString;
Parameters.ParamByName('FSupplier_1').Value:=ADOQ1.FieldByName('供应商代码').AsInteger;
Parameters.ParamByName('ProductCode_1').Value:=ADOQ1.FieldByName('物料代码').AsInteger;
Parameters.ParamByName('FirstWeight_1').Value:=ADOQ1.FieldByName('第一称重').AsFloat;
Parameters.ParamByName('FEmp_1').Value:=ADOQ1.FieldByName('操作员').Value;
Parameters.ParamByName('Department_1').Value:=ADOQ1.FieldByName('操作部门').AsInteger;
Parameters.ParseSQL(SQL.Text,TRUE);
ADOQBAK.ExecSQL;
end;
ADOQ1.Next;
end;
end;
提示:“List Index Out Of Bounds(1)”不知道是哪里错了,请各位大虾帮忙看看已经两天了还没有查出问题
解决方案 »
- 关闭delphi7 后出现如下错误提示
- 高手?怎样删除IE历史记录的某一条记录
- 用tstringlist如何修改文本文件的某一行?
- 各位高手快来,这里有美女,金钱,以及自由快来吧
- Delphi应用-ActiveX
- ====各位高手早上好,我来报道了=====请问一下,WORD里面那个动画的助手,就是帮助,那个东西是怎么做了?拜谢~~
- 帮忙看看这段程序。
- StringGrid的内容怎么倒回到Query里面啊?
- 从“熊猫烧香”中学程序
- DELPHI下PARADOX的问题
- tmp:=copy(Seln,1,1)[1];是什么写法
- 请问一下,我下载了一个mxoutlookbar,我想在程序中使用,具体怎么使用
begin
ADOQ1.First;
.....
ADOQBAK.ExecSQL;
end;
ADOQ1.Next;
你的这段代码中就已经遭成死循环了
2.
Parameters.Clear;
Parameters.Add;
ParamCheck:=true;
Parameters[0].Name:='InterID_1';
Parameters[0].DataType:=ftInteger;
.......
Parameters[7].Name:='FEmp_1';
Parameters[7].DataType:=ftInteger;
Parameters[8].Name:='Department_1';
Parameters[8].DataType:=ftInteger;
以这部分代码没有什么作用,因为本身你的SQL中
{:InterID_1,:CardNO_1,:.....:FEmp_1,:Department_1 }
这部分中已经写好参数的名称了,你相当于,清了又重设置了一遍.
3. 你的代码中只在循环开始
Close;
SQL.Clear; 以后就没表清空
4..我也描述不清了,你自己看一下我改后的代码吧,呵:)
我改成这样,你试一下(我没有测)
procedure TForm1.Button1Click(Sender: TObject);
const ProviderStr='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=';
{var CardNo,TruckNo:String;
FirstWeight:Double;
ProductCode:Integer; //产品代码
FirstDate:TDateTime;
FSupplier:Integer;//供应商代码
FEmp:Integer;//职工代码
Department:Integer;//部门代码
InterID:Integer;//通知单内码}
begin
if SaveDialog1.Execute then
CreateAccessFile(SaveDialog1.FileName,'') ;
with ADOCBAK do
begin
if not Connected then
begin
ConnectionString :=ProviderStr+SaveDialog1.FileName;
Connected:=true;
end;
end;
with ADOQBAK do
begin
Close;
SQL.Clear;
SQL.Add('CREATE TABLE 地磅数据 (编号 INT,卡号 string,[日期] DateTime,车牌号码 String,');
SQL.Add('供应商代码 int,物料代码 int,第一称重 Float,操作员 int,操作部门 int)');
Connection:=ADOCBAK;
ExecSQL;
end;
ADOQ1.First;
while not ADOQ1.Eof do
begin
with ADOQBAK do
begin
Close;
SQL.Text := ' Insert into 地磅数据(编号,卡号,日期,车牌号码,供应商代码,物料代码,第一称重,操作员,操作部门)'+
' Values(:InterID_1,:CardNO_1,:FirstDate_1,:TruckNo_1,:FSupplier_1,:ProductCode_1,:FirstWeight_1,:FEmp_1,:Department_1)';
Parameters.ParamByName('InterID_1').Value:=ADOQ1.FieldByName('编号').AsInteger;
Parameters.ParamByName('CardNO_1').Value:=ADOQ1.FieldByName('卡号').AsString;
Parameters.ParamByName('FirstDate_1').Value:=ADOQ1.FieldByName('日期').AsDateTime;
Parameters.ParamByName('TruckNo_1').Value:=ADOQ1.FieldByName('车牌号码').AsString;
Parameters.ParamByName('FSupplier_1').Value:=ADOQ1.FieldByName('供应商代码').AsInteger;
Parameters.ParamByName('ProductCode_1').Value:=ADOQ1.FieldByName('物料代码').AsInteger;
Parameters.ParamByName('FirstWeight_1').Value:=ADOQ1.FieldByName('第一称重').AsFloat;
Parameters.ParamByName('FEmp_1').Value:=ADOQ1.FieldByName('操作员').Value;
Parameters.ParamByName('Department_1').Value:=ADOQ1.FieldByName('操作部门').AsInteger;
ADOQBAK.ExecSQL;
end;
ADOQ1.Next;
end;
end;
而在于,代码中adoquery出现混乱的情况遭成的.