怎样才能通过写程序把一个文本内容比如RichEdit的内容(包括换行符、标点等等)存入/取出数据库?那个字段设置为什么类型?其他诸如Word文档或者其他文档能不能直接按照格式在数据库里面存取?数据库:SQL Server 2000

解决方案 »

  1.   

    下面的不知能否有用?  例如,有一段人事档案资料archive.txt,内容如下:
      小许男21工程师
      小吴女23助理工程师
      小蔡男22助理工程师
      小牟女22工程师
      要将它转入数据库archive.dbf中,archive.dbf结构如下:
      姓名,性别,年龄,职称
        FunctionRegulateStr(aString:String;Sepchar:String):String;
      var
      i,Num:Integer;
      Flag:Boolean;
      MyStr,TempStr:String;
      begin
      Flag:=False;//进行标志,去除多余的分割符
      Num:=Length(aString);//计算aString串的长度
      fori:=1toNumdo
      begin
      TempStr:=Copy(aString,i,1);//取aString串中的一字符
      if TempSt>=SepChar then
      begin
      MyStr:=MyStr+TempDtr;
      Flag:=True;
      end
      else
      if(Flag=True)then
      begin
      Mystr:=Mystr+TempSrt;
      Flag:=False;
      end;
      end;
      if MyStr[Length(MyStr)]>=SepChar then
      MyStr:=MyStr+SepChar;
      RegulateSrt:=MyStr;
      end;
      FunctionGetSubStr(varaString:String,SepChar:Strign):String;
      var
      Mysrt:String;
      StrLen:Integer;
      SepCharPso:Integer;
      begin
      StrLen:=Length(aString);
      SepCharPos:=Pos(SepChar,aString);//计算分割符在子串中的位置
      MyStr:=Copy(aString,1,SepCharPos-1);//将分割符前所有字符放到mystr串中
      Delete(aString,1,SepCharPos);//除去分割符和分割符前的子串
      GetSubStr:=MyStr;//返回一个字段
      end;
      FunctionTforml.GetSubStrNum(aString:String;SepChar:String):Integer;
      var
      i:Integer;
      StrLen:Integer;
      Num:Integer;
      begin
      StrLen:=Length(aString);
      Num:=0;
      for i:=1 to StrLen do
      if Copy(aString,i,1)=SepChar then
      Num:=Num+1;
      GetSubSrtNum:=Num;
      end:
     
      1.首先建立一个窗体Forml,加入一个RichEditl(或Menol),一个按钮Buttonl和一个Tablel,设置Tablel的属性:
      Tablell.DataBase=′c:\Archivs′
      Tablell.TableName=′Archive.dbf′
      2.分别加入以下程序:
      ConstSpace:=′′
      ProcedureTForml.FormCreate(Sender:Tobject);
      begin
      RichRditl.Lines.LoadFromFile(′Archive.txt′);
      end;
      ProcedureTForml.Button1Click(Sender:T object);
      var
      i,j:Integer;
      MyLine:String;
      begin
      with Tablel do
      begin
      Open;
      for i:=0 to RichEditl.Lines.Count-1 do
      begin
      MyLine:=RegulateStr(Richeditl.Lines[i],Space);
      for j:=1 to Num To ken(MyLIne,Space) do
      begin
      Append;
      fileds[j-1].aString:=GetSubSrt(MyLine,Space));
      post;
      end;
      end;
      end;
      end;
      

  2.   

    存:
    var
      MemStrm:TMemoryStream;
    begin
      MemStrm:=TMemoryStream.Create;
      try
        RichEdit1.Lines.SaveToStream(MemStrm);
        Table1.Edit;
        TBlobField(Table1.FieldByName('RichEdit')).LoadFromStream(MemStrm);
        Table1.Post;
      finally
        MemStrm.Free;
      end;
    end;
    取:
    var
      MemStrm:TMemoryStream;
    begin
      MemStrm:=TMemoryStream.Create;
      try
        TBlobField(Table1.FieldByName('RichEdit')).SaveToStream(MemStrm);
       RichEdit1.Lines.LoadFromStream(MemStrm);
      finally
        MemStrm.Free;
      end;
    end;
      

  3.   

    可以保存在Image类型字段中,blazingfire(烈焰) 指出的存取的方法我认为是最好的方法,不过取的时候还要在
    TBlobField(Table1.FieldByName('RichEdit')).SaveToStream(MemStrm);
    后加一句:
    MemStrm.position:=0;
    否则MenStrm中的数据读不出来;
    word文挡格式非常复杂,无法用上面的方法存取。通常的做法是直接保存文件到字段中。保存文件的操作可以参阅http://www.csdn.net/expert/topic/960/960982.xml?temp=.64349
      

  4.   

    用TDBRICHEDIT应该可以解决啊。
      

  5.   

    保存一般不用带DB的东西。如果实在无法解决的话还有一招无赖的:Table1DocField.LoadFromFile('FileName');DocField为Image字段的名字。