V
vclsaga
Unregistered / Unconfirmed
GUEST, unregistred user!
1、开发工具:DELPHI72、控件:SSDAC.components.v4.35.full.source,XLSReadWriteII23、数据库:Microsoft SQL Server Compact Edition 3.1实现:有EXCEL文件,内容大概有10000多条记录,我想将EXCEL文件导入到数据库SDF中;问题:数据只能导入946条码,然后报错:The specified buffer size is not valid代码片段如下:
请教各位高人,是什么原因???谢谢!!!
代码:
procedure TMainForm.Instdb;var conn, fpath, sSQL, qSQL: string; i, Max, j: Integer; Msg: string;begin qSQL := 'SELECT 设备名称 FROM INFO WHERE 设备编号=:设备编号'; sSQL := 'INSERT INTO INFO (设备名称, 产品型号, 单位, 设备编号, 。。。。。。 备注信息, 附件信息, 状态)'+ 'VALUES (:设备名称, :产品型号, :单位, :设备编号, 。。。。。。, :备注信息, :附件信息,:状态)'; fpath := ExtractFilePath(Application.ExeName)+'db.sdf'; conn := 'Provider=MICROSOFT.SQLSERVER.MOBILE.OLEDB.3.0;'+ 'Data Source="'+fpath+'"'; if OpenDialog1.Execute then begin try MSConnection1.ConnectString := conn; MSConnection1.Database := fpath; if MSConnection1.Connected then MSConnection1.Close; MSConnection1.Open; except MessageBox(Handle, '数据库打开失败!', '提示:', MB_OK or MB_ICONERROR); Exit; end; XLS.Filename := OpenDialog1.FileName; xls.Read; Max := XLS.Sheet[0].LastRow; RzProgressStatus1.TotalParts := Max; RzProgressStatus1.NumSegments := 1; j := 0; for i:=1 to Max do begin Update; Application.ProcessMessages; RzProgressStatus1.PartsComplete := i; with MSQuery1 do begin SQL.Clear; SQL.Add(qSQL); Params.ParamByName('设备编号').DataType := ftVariant; Params.ParamByName('设备编号').Value := XLS.Sheet[0].AsString[3,i];[color=#FF0000]//断点追踪,有时i的值为946时在此处报错[/color] Open; if RecordCount>0 then begin Close; inc(j); Continue; end; Close; end; with MSQuery1 do begin SQL.Clear; SQL.Add(sSQL); Params.ParamByName('设备名称').DataType := ftVariant; Params.ParamByName('设备名称').Value := XLS.Sheet[0].AsString[0,i]; Params.ParamByName('产品型号').DataType := ftVariant; Params.ParamByName('产品型号').Value := XLS.Sheet[0].AsString[1,i]; Params.ParamByName('单位').DataType := ftVariant; Params.ParamByName('单位').Value := XLS.Sheet[0].AsString[2,i]; Params.ParamByName('设备编号').DataType := ftVariant; Params.ParamByName('设备编号').Value := XLS.Sheet[0].AsString[3,i]; Params.ParamByName('附件信息').DataType := ftVariant; 。。。。。。 Params.ParamByName('附件信息').Value := XLS.Sheet[0].AsString[33,i]; Params.ParamByName('状态').DataType := ftVariant; Params.ParamByName('状态').Value := '未普查'; Execute; [color=#FF0000]//断点追踪,有时i的值为947时此处报错[/color] end; end; with MSQuery1 do begin SQL.Clear; SQL.Add('SELECT *FROM INFO'); Open; end; Msg := '共有数据:' + IntToStr(Max); Msg := Msg + #13 + '有效数据为:' + IntToStr(Max - j); Msg := Msg + #13 + '重复数据为:' + IntToStr(j); Msg := '数据导入完成!' + #13 + Msg; MessageBox(Handle, PChar(Msg), '提示:', MB_OK or MB_ICONINFORMATION); RzProgressStatus1.TotalParts := 0; end;end;
代码: