回 帖 发 新 帖 刷新版面

主题:请教:如何将文本文件的内容存到数据库的memo字段中呢?

想要将文本文件的内容存到数据库的memo字段中去,可是始终不成功。我用一个string变量来获取文本内容,而且显示该变量的话也正确,可是一入库就不行了,总是显示为空。请教各位大师,这中间的问题出在哪里呢?我应该怎么做?万分感谢!

回复列表 (共6个回复)

沙发

把那段贴出来看看呢

顺带说明你自己定义的标志符的数据类型

板凳

好的,谢谢.

  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 楼


好的,谢谢.

  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 楼

这句有问题:
FileRead(i,content.c_str(),filesize);
因为你绕过了 String 类的成员函数来向 content 输入数据!这破坏了 content 的数据一致性! 比如它的串长度就是 0 ! 这虽然可以被认为是 String 类不够完善引起的,但另一方面也是由于编程者没有遵守通常规则造成的错误. 


切记, 不要绕过类的成员函数来改变该类的对象.

5 楼

哦,那能否请教我应该怎么做呢?

6 楼


谢谢,我已经知道怎么做了.刚刚换了一种方式已经测试成功了.谢谢.

我来回复

您尚未登录,请登录后再回复。点此登录或注册