我的完整程序是下面这样的,除了提示这个错误之外,还有我表中的数据,除了第一行插进去了,其他数据都没插进去,然后我那个需要插入数据的表的主键是_id,类型是GpGUID (uniqueidentifier),我做了一个自动更新插入GUID数据的程序,大家帮帮忙,看看这个程序应该怎么修改啊!~很着急,在线等!~~
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, ADODB, Provider, DBClient, DB, Grids, DBGridEh,
RzShellDialogs,comObj,ActiveX, StdCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DBGridEh1: TDBGridEh;
DataSource1: TDataSource;
ADOConnection2: TADOConnection;
ADOQuery1: TADOQuery;
DataSource2: TDataSource;
DBGridEh2: TDBGridEh;
RzBitBtn1: TRzBitBtn;
ADOQuery2: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RzBitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
try
ADOConnection2.Connected:=true;
ADOConnection1.Connected:=true;
Except
Application.MessageBox('数据库连接失败,请检查参数!','警告',mb_iconwarning)
end;
end;procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
I:Integer;
sGUID:string;
TmpGUID:TGUID;
begin
with ADOQuery2 do begin
ADOQuery2.SQL.clear;
ADOQuery2.SQL.add('select * from [sheet1$]');
ADOQuery2.Open;
ADOQuery2.First;
end;
begin
for I := 0 to 10 do
begin
if CoCreateGUID(TmpGUID) = S_OK then
sGUID := GUIDToString(TmpGUID)
end;
end;
while not ADOQuery2.eof do
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add('select * from Pub_Btype');
ADOQuery1.Open;
ADOQuery1.Append;
ADOQuery1.FieldByName('_id').asstring:=sguid;
ADOQuery1.FieldByName('FullName').asstring:=adoquery2.fieldbyname('名称').asstring;
ADOQuery1.FieldByName('UserCode').asstring:=adoquery2.fieldbyname('编码').asstring;
ADOQuery1.FieldByName('abbrName').asstring:=adoquery2.fieldbyname('简码').asstring;
ADOQuery1.FieldByName('Comment').asstring:=adoquery2.fieldbyname('备注').asstring;
ADOQuery1.SQL.BeginUpdate;
ADOQuery1.Post;
ADOQuery2.next;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//ADOConnection1.Connected:=false;
//ADOConnection2.Connected:=false;
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, ADODB, Provider, DBClient, DB, Grids, DBGridEh,
RzShellDialogs,comObj,ActiveX, StdCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DBGridEh1: TDBGridEh;
DataSource1: TDataSource;
ADOConnection2: TADOConnection;
ADOQuery1: TADOQuery;
DataSource2: TDataSource;
DBGridEh2: TDBGridEh;
RzBitBtn1: TRzBitBtn;
ADOQuery2: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RzBitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
try
ADOConnection2.Connected:=true;
ADOConnection1.Connected:=true;
Except
Application.MessageBox('数据库连接失败,请检查参数!','警告',mb_iconwarning)
end;
end;procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
I:Integer;
sGUID:string;
TmpGUID:TGUID;
begin
with ADOQuery2 do begin
ADOQuery2.SQL.clear;
ADOQuery2.SQL.add('select * from [sheet1$]');
ADOQuery2.Open;
ADOQuery2.First;
end;
begin
for I := 0 to 10 do
begin
if CoCreateGUID(TmpGUID) = S_OK then
sGUID := GUIDToString(TmpGUID)
end;
end;
while not ADOQuery2.eof do
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add('select * from Pub_Btype');
ADOQuery1.Open;
ADOQuery1.Append;
ADOQuery1.FieldByName('_id').asstring:=sguid;
ADOQuery1.FieldByName('FullName').asstring:=adoquery2.fieldbyname('名称').asstring;
ADOQuery1.FieldByName('UserCode').asstring:=adoquery2.fieldbyname('编码').asstring;
ADOQuery1.FieldByName('abbrName').asstring:=adoquery2.fieldbyname('简码').asstring;
ADOQuery1.FieldByName('Comment').asstring:=adoquery2.fieldbyname('备注').asstring;
ADOQuery1.SQL.BeginUpdate;
ADOQuery1.Post;
ADOQuery2.next;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//ADOConnection1.Connected:=false;
//ADOConnection2.Connected:=false;
end;end.
procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
I:Integer;
sGUID:string;
TmpGUID:TGUID;
begin
with ADOQuery2 do
begin
close;
SQL.clear;
SQL.add('select * from [sheet1$]');
Open;
First;
end; for I := 0 to 10 do
begin
if CoCreateGUID(TmpGUID) = S_OK then
sGUID := GUIDToString(TmpGUID)
end; ADOQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add('select * from Pub_Btype');
ADOQuery1.Open;
while not ADOQuery2.eof do
begin
ADOQuery1.Append;
ADOQuery1.FieldByName('_id').asstring:=sguid;
ADOQuery1.FieldByName('FullName').asstring:=adoquery2.fieldbyname('名称').asstring;
ADOQuery1.FieldByName('UserCode').asstring:=adoquery2.fieldbyname('编码').asstring;
ADOQuery1.FieldByName('abbrName').asstring:=adoquery2.fieldbyname('简码').asstring;
ADOQuery1.FieldByName('Comment').asstring:=adoquery2.fieldbyname('备注').asstring;
ADOQuery1.SQL.BeginUpdate;
ADOQuery1.Post;
ADOQuery2.next;
end;
end; 试试,看怎么样?
sGUID := GUIDToString(TmpGUID)
是不是能够保证正确执行,并且得到唯一的GUID
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, ADODB, Provider, DBClient, DB, Grids, DBGridEh,
RzShellDialogs,comObj,ActiveX, StdCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DBGridEh1: TDBGridEh;
DataSource1: TDataSource;
ADOConnection2: TADOConnection;
ADOQuery1: TADOQuery;
DataSource2: TDataSource;
DBGridEh2: TDBGridEh;
RzBitBtn1: TRzBitBtn;
ADOQuery2: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RzBitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
begin
try
ADOConnection2.Connected:=true;
ADOConnection1.Connected:=true;
Except
Application.MessageBox('数据库连接失败,请检查参数!','警告',mb_iconwarning)
end;
end; procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
I:Integer;
sGUID:string;
TmpGUID:TGUID;
begin
with ADOQuery2 do begin
ADOQuery2.SQL.clear;
ADOQuery2.SQL.add('select * from [sheet1$]');
ADOQuery2.Open;
ADOQuery2.First;
end;
//上次好像回復過你,這個在這裏產生沒有意義。
{
begin
for I := 0 to 10 do
begin
if CoCreateGUID(TmpGUID) = S_OK then
sGUID := GUIDToString(TmpGUID)
end;
end;} ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add('select * from Pub_Btype');
ADOQuery1.Open; while not ADOQuery2.eof do
begin
{ ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add('select * from Pub_Btype');
ADOQuery1.Open; } // 這些放到前面去。不然反復打開,折騰死它了 if CoCreateGUID(TmpGUID) = S_OK then
sGUID := GUIDToString(TmpGUID)
else rais exception.create(' 產生序號出錯'); ADOQuery1.Append;
ADOQuery1.FieldByName('_id').asstring:=sguid;
ADOQuery1.FieldByName('FullName').asstring:=adoquery2.fieldbyname('名称').asstring;
ADOQuery1.FieldByName('UserCode').asstring:=adoquery2.fieldbyname('编码').asstring;
ADOQuery1.FieldByName('abbrName').asstring:=adoquery2.fieldbyname('简码').asstring;
ADOQuery1.FieldByName('Comment').asstring:=adoquery2.fieldbyname('备注').asstring;
ADOQuery1.SQL.BeginUpdate;
ADOQuery1.Post;
ADOQuery2.next;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//ADOConnection1.Connected:=false;
//ADOConnection2.Connected:=false;
end; end.