程序报错validation error for column ZDJ,value "***null***"我跟踪了下ZDJ字段的值,是有值的,不为空,为什么还出这个错误呢。
解决方案 »
- Hook WinSock里面的Accept函数时,如何在Accept的时候断开Sockect
- ??? 对oracle 试图操作会不会影响原系统性能??
- 收邮件的小程序为什么有的邮箱收的内容显示不正常啊???高手帮我!!!
- 高分求indy的sock编程的代码,我要实现GPRS连接!谢了(分不够再加,我的分多)
- 谁有写好硬盘序列号(物理的)的dll,奉献一个
- 请问如何用Ado新建一张表然后存储存到SQL Server中的一个数据库中去!
- 高分寻求做智能卡要用到Delphi、数据库中的哪些技术或其他相关技术均可,回答均有分
- 弃暗投明
- delphi中二进制是如何表示的???
- 非高手莫入,BDE问题,这个烂BDE
- 如何循环访问网页
- Delphi怎么用QReport做可以打印照片的报表!!!!!!!!在线等候··
void __fastcall Tmainf::Button4Click(TObject *Sender)
{
if(CheckListBox1->ItemIndex==-1)
{
ShowMessage("请选择您要导入数据库的表名!");
return;
}
long int count=0;
bool p;
TStringList * mzd=new TStringList(); //目的库字段
TStringList * yzd=new TStringList(); //源库字段
if(!CheckBox2->Checked) //是否检查字段
{
//以下是检查数据字段是否匹配
for(int i=0;i<CheckListBox1->Items->Count;i++)
{
if(CheckListBox1->Checked[i])
{
count++;
DM->IBDatabase1->GetFieldNames(""+CheckListBox1->Items->Strings[i]+"",mzd); //链接表获取字段
DM->IBDatabase2->GetFieldNames(""+CheckListBox1->Items->Strings[i]+"",yzd);
if(yzd->Count!=mzd->Count)
{
ShowMessage("两个数据库表中字段数量不一致!");
delete mzd;
delete yzd;
return;
}
for(int j=0;j<yzd->Count;j++)
{ for(int k=0;k<mzd->Count;k++)
{
p=false;
if(yzd->Strings[j]==mzd->Strings[k])
{
p=true;
break;
}
}
if(p==false)
{
ShowMessage("两个数据库中字段不匹配!");
delete mzd;
delete yzd;
return;
} }
}
}
}
//以下是往数据库导数据。
ProgressBar1->Max=count;
ProgressBar1->Step=1;
for(int a=0;a<CheckListBox1->Items->Count;a++)
{
DM->IBTable1->Active=false;
if(CheckListBox1->Checked[a])
{
int t=0;
Label4->Caption="正在导入"+CheckListBox1->Items->Strings[a]+"表";
Label4->Refresh();
DM->IBTable1->TableName=CheckListBox1->Items->Strings[a];
DM->IBTable1->Active=true;
DM->IBTable1->GetFieldNames(mzd);
DM->IBQuery1->Close();
DM->IBQuery1->SQL->Clear();
DM->IBQuery1->SQL->Add("select * from "+CheckListBox1->Items->Strings[a]+"");
DM->IBQuery1->Open();
DM->IBQuery1->GetFieldNames(yzd);
long int a1=0;
while(DM->IBQuery1->Eof!=true)
{
a1++;
DM->IBQuery1->Next();
}
Label14->Caption="共"+IntToStr(a1)+"行";
Label14->Refresh();
DM->IBQuery1->First();
while(DM->IBQuery1->Eof!=true)
{
t++;
Label6->Caption="第"+IntToStr(t)+"行";
Label6->Refresh();
DM->IBTable1->Insert(); //准备插入
for(int b=0;b<yzd->Count;b++)
{
if(CheckBox2->Checked) //只导入相同字段
{
for(int k=0;k<mzd->Count;k++)
{
if(yzd->Strings[b]==mzd->Strings[k])
{
DM->IBTable1->FieldValues[""+yzd->Strings[b]+""]=DM->IBQuery1->FieldByName(""+yzd->Strings[b]+"")->Value;
//p=true;
break;
}
}
}
else
{
DM->IBTable1->FieldValues[""+yzd->Strings[b]+""]=DM->IBQuery1->FieldByName(""+yzd->Strings[b]+"")->Value;
}
}
DM->IBTable1->Post();
DM->IBQuery1->Next();
}
ProgressBar1->StepIt();
}
}
ShowMessage("数据成功导入!");
delete mzd;
delete yzd;
ProgressBar1->Position=0;
}
for(int i=0;i<CheckListBox1->Items->Count-1 /* 减个1 */;i++)
IBTable1->FieldByName(""+yzd->Strings[b]+"").AsString 试一下吧
这样是不行的,每个字段的数据类型不一样,不一定都是AsString,
所以用的FieldValues,这个函数可以自己转换到字段的类型,就是速度会慢点。
是ZDJ字段所有行都会报错,还是个别行?
用更简单的取数据代码会不会报错?
我跟踪的ZDJ这个字段,确实是有值的,而且,我取了它的值,然后再返给ZDJ字段,跟踪都有值,
总是报错ZDJ字段值为空。后来无奈了,无聊了,觉得机器有点慢,然后就清理了下系统,
然后......我又试了下,过去了,不报错了......
请教大牛解答。
我把ZDJ字段不能为空的现在去掉,就不报错了。
我就不明白了。
妖哥等大牛们,你们啥时候来啊?
自己找到问题所在了,无奈了。
感谢大家的解答。ZDJ字段,关联其他表中ZDJ字段,那个表中的ZDJ字段为空,检查约束限制,
即使我给现表中的ZDJ字段付值,但也是空,问题所在。所以现把另外的表中ZDJ字段做好值,在弄现表中ZDJ字段值......