2010-06-18 14 views
0

Delphi 7 SQLServer 2000Impossible de récupérer plus de 8 octets à partir d'un champ de texte dans le serveur SQL via Delphi ADO

Je suis un problème avec une application héritage que je suis incapable de recompiler, parce que quand je fais je perdre la possibilité de récupérer des documents d'un champ de texte dans lequel ils sont stockés et écrire sur le disque, je ne reçois que les 8 premiers octets. J'ai une application beaucoup plus grande, mais une application vraiment simple recrée le problème.

Le code est ci-dessous. La chaîne de connexion utilisée pour se connecter est.

Provider=SQLOLEDB.1;Password=toflidium;Persist Security Info=True;User ID=sa;Initial Catalog=DocManager;Data Source=DELPHIBOX;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DELPHIBOX;Use Encryption for Data=False;Tag with column collation when possible=False 

Le code entier pour le cas de test

unit Unit1; 

interface 

uses 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
Dialogs, Grids, DBGrids, ADODB, DB, StdCtrls, DBCtrls; 

type 
TForm1 = class(TForm) 
ADOConnection1: TADOConnection; 
ADOQuery1: TADOQuery; 
Edit1: TEdit; 
Button1: TButton; 
DBText1: TDBText; 
DBText2: TDBText; 
DBText3: TDBText; 
DataSource1: TDataSource; 
ADOTable1: TADOTable; 
DataSource2: TDataSource; 
DBGrid1: TDBGrid; 
ADOQuery1DocumentDataID: TAutoIncField; 
ADOQuery1VersionID: TIntegerField; 
ADOQuery1DocName: TStringField; 
ADOQuery1ActualDoc: TMemoField; 
procedure Button1Click(Sender: TObject); 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    sql : string; 
begin 

    sql := 'Select Top 1 * from tblDocumentData where VersionID = ' + ADOTable1.FieldByName('VersionID').asstring ; 
    ADOQuery1.Close; 
    ADOQuery1.SQL.Text := sql; 

    ADOQuery1.Open; 

    TBlobField(ADOQuery1.FieldByName('ActualDoc')).SaveToFile('c:\temp\temp\myfile' 
        + ADOTable1.FieldByName('VersionID').asstring + '.doc'); 

end; 

end. 

C'est l'ensemble du fichier à writen dis

ÐÏࡱá 

je recevoir un 20 ensemble - mot 50K document.

J'ai reconstruit une machine entière pour voir si quelque chose avait été mal réglé sur ma machine de développement et j'ai le même problème lors de la reconstruction. si je construis simplement et que j'essaie de faire face à une base de données en direct, j'ai le même problème, mais l'ancienne version (maintenant âgée d'environ 4 ans) fonctionne bien.

Des idées?

Répondre

1

J'ai trouvé le problème. Je dois avoir déplacé des machines après la mise à jour précédente et non installée Update 1 pour Delphi 7.

Installé la mise à jour et il a résolu le problème - aurait dû être mis à jour avant d'aller chercher d'autres problèmes.

J'espère que cette réponse pourrait aider d'autres personnes.