DELPHI 与 .JPG 与 MS SQL SERVER.
一。TABLE字段类型怎么样设定?类型是什么,长度怎么设?
二。SQL SERVER中插入C:\ABC.JPG到以上字段的代码怎么写?替换图片呢。
三。怎么样将Image控件中显示的JPG图片插入到以上字段。
四。怎么读出以上字段的图片片到一个DELPHI的图片控件中。如image.

解决方案 »

  1.   

    1.添加字段,table字段类型为image即可
      

  2.   

    以前很多这种问题的帖子,我一般都是采用流写入,网上很多更好的方法
    http://topic.csdn.net/u/20071223/23/b2af0b0d-07aa-4664-96bd-4bd01e1c63fe.html
      

  3.   

    1、设成image类型
    2、3、参考如下红色部分:procedure TFrmDocument.SpBtnAddClick(Sender: TObject);
    var
      sqlText: string; 
      TmpAdo: TAdoquery;
      FileKind: string;
    begin
      if (EdtFileDir.Text = '') or (trim(EdtFileName.Text) = '') or (CmbKind.ItemIndex < 0) then
      begin
        MessageBox(Handle,'请将信息添加完整!','信息提示',MB_ICONWARNING + MB_OK);
        exit;
      end;
      try
        TmpAdo := TAdoquery.Create(nil);
        sqlText := 'select * from DocumentTb where 1<>1';
        FrmDm.OpenSql(TmpAdo,sqlText);   
        FileKind := Rightstr(EdtFileDir.Text,4);
        TmpAdo.Append;
        TmpAdo.FieldByName('FileName').Value := EdtFileName.Text+FileKind;
        TmpAdo.FieldByName('KindId').Value := (CmbKind.Items.Objects[CmbKind.ItemIndex] as TCombKind).AKindId;
        TmpAdo.FieldByName('SaveTime').Value := FormatDateTime('yyyy-mm-dd',DateTimePicker1.Date);
        TblobField(TmpAdo.FieldByName('Content')).LoadFromFile(EdtFileDir.Text);
        TmpAdo.Post;
        {日志}
        WriteLog(CUR_USER.UserID,DateTimeTostr(Now()),IntTostr(LOG_DOCUMENT),
                 '新增文档<'+EdtFileName.Text+'>');    
        EdtFileDir.Text := '';
        EdtFileName.Text := '';
        CmbKind.ItemIndex := 0;
        TmpAdo.Free;
        sqlText := 'select * from DocumentTb';
        FrmDm.OpenSql(FrmDm.AQDecument,sqlText);
      except
        MessageBox(Handle,'添加信息失败!','信息提示',MB_ICONWARNING + MB_OK);
      end;
    end;
    4、参考如下代码:var
      sqlText: string;
      Savedir: string;
      TmpAdo: TAdoquery;
    begin
      if trim(EdtFileName.Text) <> '' then
      begin
        TmpAdo := TAdoquery.Create(nil);
        try
          sqlText := 'select * from DocumentTb where FileName = '''+EdtFileName.Text+'''';
          FrmDm.OpenSql(TmpAdo,sqlText);
          SaveDialog1.FileName := trim(TmpAdo.fieldbyname('FileName').AsString);
          SaveDialog1.DefaultExt := ExtractFileExt(trim(TmpAdo.fieldbyname('FileName').AsString));
          SaveDialog1.Filter := ExtractFileExt(trim(TmpAdo.fieldbyname('FileName').AsString));
          if self.SaveDialog1.Execute then
          begin
            Savedir := self.SaveDialog1.FileName ;   
            TblobField(TmpAdo.FieldByName('Content')).SaveToFile(Savedir);
            ShellExecute(Handle, 'open', PChar(Savedir), nil, nil, SW_SHOW);
          end;
        finally
          TmpAdo.Free;
        end;
      end;
    end;  
      

  4.   

    一。TABLE字段类型怎么样设定?类型是什么,长度怎么设?在数据库中定义为 image类型
    二。SQL SERVER中插入C:\ABC.JPG到以上字段的代码怎么写?替换图片呢。 
    三。怎么样将Image控件中显示的JPG图片插入到以上字段。 
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var
      filename :string;
      srm:TStringStream;
    begin
      try
      if opendialog1.Execute  then
        filename:=opendialog1.FileName ;
      image1.Picture.LoadFromFile(filename);
      srm:=TStringStream.Create('');
      image1.Picture.Graphic.SaveToStream(srm) ;  with adoquery1 do
        begin
          close;
          sql.clear;
          sql.Add('insert into picture(name) values(:stream)');
          parameters.ParamByName('stream').LoadFromStream(srm,ftblob);
          execsql;
          showmessage('图片保存成功');
        end;
      finally
        srm.Free ;
      end;
    end;
    四。怎么读出以上字段的图片片到一个DELPHI的图片控件中。如image.procedure TForm1.Timer1Timer(Sender: TObject);
    var
      srm:TStringStream;
    begin
      try
        srm:=TStringStream.Create('');
        with adoquery1 do
          begin
            active:=true;
            next;
            Tblobfield(fieldbyname('name')).SaveToStream(srm);
            srm.Position:=0;
            image1.Picture.Graphic.loadfromstream(srm);
            if eof then
               first;
          end;  finally
        srm.Free;
      end;
    end;
    最后,还是提醒楼主不要这样做占空间查询又慢,最好还是用文件路径。
      

  5.   

    用dbimage试试看,我用它觉的很方便啊