Avatar billede kennethv Nybegynder
01. november 2006 - 11:46 Der er 13 kommentarer og
1 løsning

[Microsoft][ODBC SQL Server Driver]String data, right truncation.

Denne fejl opstår og jeg aner ikke hvad der menes med den:

[Microsoft][ODBC SQL Server Driver]String data, right truncation.

Jeg har lidt på fornemmelsen at dette er grunden til at jeg får den fejl, men det for står jeg ikke, da jeg har brugt samme runtine til noget andet.
ADOQuery1.Parameters.ParamByName('ParamFILEDATA').Value := DataList.Text;

            try
              DataList := TStringList.Create;
              DataList.LoadFromFile(FileName);
            finally
              ADOQuery1.SQL.Text := 'Insert Into DATALOG (NAME, FILENAME, FILEDATA) Values(:ParamNAME,:ParamFILENAME,:ParamFILEDATA)';
//              ADOQuery1.SQL.Text := 'Insert Into TEST (NAME) Values(:ParamNAME)';
              ADOQuery1.Connection.BeginTrans;
              try
                ADOQuery1.Parameters.ParamByName('ParamNAME').Value := Navn;
                ADOQuery1.Parameters.ParamByName('ParamFILENAME').Value := Filnavn;
                ADOQuery1.Parameters.ParamByName('ParamFILEDATA').Value := DataList.Text;
                ADOQuery1.ExecSQL;
                ADOQuery1.Connection.CommitTrans;
              except
                ADOQuery1.Connection.RollbackTrans;
                Raise;
              end;
            end;
Avatar billede stoney Nybegynder
01. november 2006 - 12:51 #1
Avatar billede kennethv Nybegynder
01. november 2006 - 13:22 #2
Hmm, kan jeg bruger det til noget? :)
Avatar billede kennethv Nybegynder
01. november 2006 - 13:31 #3
Jeg har lavet dette i en andet program som flytter data fra en db til en anden db og her bruger jeg samme rutine, men jeg har ingen problemer her.

        for Y := 0 to FileList.Count - 1 do
        begin
          Label2.Caption := FileList.Strings[Y];
          Label2.Refresh;
          ADOQuery1.SQL.Text := 'Select DATALOG From DATALOG Where FILENAME='+Quotedstr(FileList.Strings[Y]);
          ADOQuery1.Open;
          while not ADOQuery1.Eof do
          begin
            MemoryStream := (ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('DATALOG'),bmRead) as TMemoryStream);
            DataList.LoadFromStream(MemoryStream);
            Memo1.Lines.Text := DataList.Text;
            Memo1.Refresh;
            ADOQuery4.SQL.Text := 'Insert Into DATALOG (NAME, FILENAME, FILEDATA) Values(:ParamNAME,:ParamFILENAME,:ParamFILEDATA)';
            ADOQuery4.Connection.BeginTrans;
            try
              ADOQuery4.Parameters.ParamByName('ParamNAME').Value := UserList.Strings[I];
              ADOQuery4.Parameters.ParamByName('ParamFILENAME').Value := FileList.Strings[Y];
              ADOQuery4.Parameters.ParamByName('ParamFILEDATA').Value := DataList.Text;
              ADOQuery4.ExecSQL;
              ADOQuery4.Connection.CommitTrans;
            except
              ADOQuery4.Connection.RollbackTrans;
              Raise;
            end;
Avatar billede arne_v Ekspert
01. november 2006 - 13:32 #4
hvad data type er ParamFILEDATA og hvor lang er DataList.Text ?

(altså: er der plads til data ?)
Avatar billede kennethv Nybegynder
01. november 2006 - 13:37 #5
ParamFILEDATA er nText i en SQL db. DataList.text er en txtfil som fylder 39k.

Er DataList ikke uendeligt eller meget stor?
Avatar billede kennethv Nybegynder
02. november 2006 - 09:46 #6
Er der en der har en ide?
Avatar billede kennethv Nybegynder
08. november 2006 - 10:51 #7
Jeg kunne virkeligt godt bruge noget hjælp her.

Dette er min procedure hvor den fejler:

procedure TALBackupCheck.DirWatch1NewFileCreated(Sender: TObject;
  const FileName: string);
var tmp : string;  MemoryStream : TMemoryStream; DataList : TStringList;
begin
  LogMessage('File created: ' + Filename,EVENTLOG_AUDIT_SUCCESS);
  MemoryStream := TMemoryStream.Create;
  if pos('CDATABUP',Filename) <> 0 then
  begin
    if pos('Log',Filename) <> 0 then
    begin
      if pos('DKSOLT',Filename) or pos('DKSODT',Filename) <> 0 then
      begin
        try
          StringList := TStringList.Create;
          repeat
            Sleep(100);
          until not FileInUse(Filename);
          try
            StringList.LoadFromFile(FileName);
          except
            on EFopenError do
            begin
              LogMessage('Cannot open file: ' + filename,EVENTLOG_INFORMATION_TYPE);
            end;
          end;
        finally
          LogMessage(filename + ' open.',EVENTLOG_INFORMATION_TYPE);
          if (POS('ROBOCOPY', StringList.Strings[2]) <> 0) and (POS('Version XP010', StringList.Strings[2]) <> 0) then
          begin
            Navn := StringList.Strings[8];
            Delete(Navn,1,pos('\',Navn));
            Delete(Navn,1,pos('\',Navn));
            Delete(Navn,1,pos('\',Navn));
            Delete(Navn,1,pos('\',Navn));
            Navn := copy(Navn,1,pos('\',Navn)-1);
            Filnavn := ExtractFileName(Filename);
            try
              DataList := TStringList.Create;
              DataList.LoadFromFile(FileName);
            finally
              ADOQuery1.SQL.Text := 'Insert Into DATALOG (NAME, FILENAME, FILEDATA) Values(:ParamNAME,:ParamFILENAME,:ParamFILEDATA)';
              ADOQuery1.Connection.BeginTrans;
              try
                ADOQuery1.Parameters.ParamByName('ParamNAME').Value := Navn;
                ADOQuery1.Parameters.ParamByName('ParamFILENAME').Value := Filnavn;
                ADOQuery1.Parameters.ParamByName('ParamFILEDATA').Value := DataList.Text;
                ADOQuery1.ExecSQL;
                ADOQuery1.Connection.CommitTrans;
              except
                ADOQuery1.Connection.RollbackTrans;
                Raise;
              end;
            end;
          end;
        end;
      end;
      MemoryStream.Free;
      StringList.Free;
    end;
  end;
end;
Avatar billede martinlind Nybegynder
10. november 2006 - 17:11 #8
Hvilken datatype er feltet ParamFILEDATA

Din fejl tyder på at du indsætter en tekst der er større/længere en dit DBfelt kan indeholde ( jeg har fået samme fejl fordi jeg prøvede at indsætte 'abc' i et felt der var def. som varchar(2) )
Avatar billede kennethv Nybegynder
13. november 2006 - 09:21 #9
Datatypen står lidt længere oppe. :)
Avatar billede kennethv Nybegynder
16. november 2006 - 11:50 #10
Jeg forstår det ikke helt, at nText ikke skulle kunne indholde en txtfil som fylder 39k.

Jeg har i et anden tråd spurgt til hvor meget nText kunne indholde og fik af vide fra Arne V, at han mener den skulle kunne indholde 2 GB = 1 milliard unicode bogstaver.



http://www.eksperten.dk/spm/739266
Avatar billede martinlind Nybegynder
16. november 2006 - 12:41 #11
datatypen nText har sikker en default/Max (32kb ) længde, som du muligvis kan ændre hvis ikke så vælg den MSSQL - type der hedder Image det er en type du kan hælde hvadsomhelst i ( binært ) og det er fint nok til dit formål ( en tekst fil er jo også bare 1'ere  og 0'er ) så den kan du godt gemme binært :)
Avatar billede arne_v Ekspert
17. november 2006 - 03:31 #12
Avatar billede kennethv Nybegynder
20. november 2006 - 11:19 #13
Jeg har nu løst problemet ved at lave datatypen om til Image som Martin forslog. Grunden til at jeg valgte en anden datatype end Image før var pga at det hele bare kørte som r.. og hat, men nu af en eller anden grunden køre det bare som smurt. Det har aldrig kørt hurtigere end det gør nu. Så.....

Martin, hvis du ligger et svar. Så får du points.

Måske du kunne svare mig på et andet spørgsmål angående MDIParent og MDIChild, men det er i en anden tråd.
Avatar billede kennethv Nybegynder
03. april 2007 - 09:38 #14
Lukkes.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester