主题:请教:如何将文本文件的内容存到数据库的memo字段中呢?
connie
[专家分:0] 发布于 2006-10-12 12:35:00
想要将文本文件的内容存到数据库的memo字段中去,可是始终不成功。我用一个string变量来获取文本内容,而且显示该变量的话也正确,可是一入库就不行了,总是显示为空。请教各位大师,这中间的问题出在哪里呢?我应该怎么做?万分感谢!
回复列表 (共6个回复)
沙发
tianyuan003 [专家分:3780] 发布于 2006-10-13 11:38:00
把那段贴出来看看呢
顺带说明你自己定义的标志符的数据类型
板凳
connie [专家分:0] 发布于 2006-10-13 12:03:00
好的,谢谢.
String filename,sqlstr,content;
int filesize;
filename=GetCurrentDir()+"\\wsfile\\tmp.txt";
FILE *in;
TStream *pstr;
if((in=fopen(filename.c_str(),"w"))==NULL) return;
fputs("zczc\nkjhf\njhgasfkg\nhjasdfjh\n",in);//先手工往一个文本文件写内容
fclose(in);
int i=FileOpen(filename,fmOpenRead);
filesize=FileSeek(i,0,2);
FileSeek(i,0,0);
FileRead(i,content.c_str(),filesize);//把内容完全读出来,附给content变量
content.TrimRight();
FileClose(i);
Application->MessageBoxA(content.c_str(),MB_OK);//此处显示正常
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from U_wsfile");
ADOQuery1->Open();
Form1->ADOQuery1->Append();
ADOQuery1->FieldByName("filename")->AsString=filename;
ADOQuery1->FieldByName("filetime")->AsString=Now();
ADOQuery1->FieldByName("fileline_old")->AsInteger=filesize;
ADOQuery1->FieldByName("fileline")->AsInteger=filesize;
ADOQuery1->FieldByName("ltype")->AsString="typhoon";
ADOQuery1->FieldByName("lcontent")->AsString=content;
ADOQuery1->FieldByName("flag")->AsInteger=1;
ADOQuery1->Post();
结果是增加到数据库中以后,其他字段正常,而lcontent为空.
3 楼
connie [专家分:0] 发布于 2006-10-13 12:04:00
好的,谢谢.
String filename,sqlstr,content;
int filesize;
filename=GetCurrentDir()+"\\wsfile\\tmp.txt";
FILE *in;
TStream *pstr;
if((in=fopen(filename.c_str(),"w"))==NULL) return;
fputs("zczc\nkjhf\njhgasfkg\nhjasdfjh\n",in);//先手工往一个文本文件写内容
fclose(in);
int i=FileOpen(filename,fmOpenRead);
filesize=FileSeek(i,0,2);
FileSeek(i,0,0);
FileRead(i,content.c_str(),filesize);//把内容完全读出来,附给content变量
content.TrimRight();
FileClose(i);
Application->MessageBoxA(content.c_str(),MB_OK);//此处显示正常
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from U_wsfile");
ADOQuery1->Open();
Form1->ADOQuery1->Append();
ADOQuery1->FieldByName("filename")->AsString=filename;
ADOQuery1->FieldByName("filetime")->AsString=Now();
ADOQuery1->FieldByName("fileline_old")->AsInteger=filesize;
ADOQuery1->FieldByName("fileline")->AsInteger=filesize;
ADOQuery1->FieldByName("ltype")->AsString="typhoon";
ADOQuery1->FieldByName("lcontent")->AsString=content;
ADOQuery1->FieldByName("flag")->AsInteger=1;
ADOQuery1->Post();
结果是增加到数据库中以后,其他字段正常,而lcontent为空.
4 楼
tianyuan003 [专家分:3780] 发布于 2006-10-13 15:07:00
这句有问题:
FileRead(i,content.c_str(),filesize);
因为你绕过了 String 类的成员函数来向 content 输入数据!这破坏了 content 的数据一致性! 比如它的串长度就是 0 ! 这虽然可以被认为是 String 类不够完善引起的,但另一方面也是由于编程者没有遵守通常规则造成的错误.
切记, 不要绕过类的成员函数来改变该类的对象.
5 楼
connie [专家分:0] 发布于 2006-10-13 15:31:00
哦,那能否请教我应该怎么做呢?
6 楼
connie [专家分:0] 发布于 2006-10-13 17:09:00
谢谢,我已经知道怎么做了.刚刚换了一种方式已经测试成功了.谢谢.
我来回复