Autor Téma: Ahoj používám SQLLite...a potrebuji uložit do databáze dokument *.mth  (Přečteno 6197 krát)

Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Napadlo mne takto?


Kód: Delphi [Vybrat]
  1. Procedure TForm1.Ulozenidokumentu(dokument:string);
  2. var
  3.   xMS: TMemoryStream;
  4. begin
  5.   xMS := TMemoryStream.Create;
  6.   try
  7.     xMS.LoadFromFile(dokument);
  8.      xMS.Position := 0;
  9.      (ds.FieldByName('doExtension') AS TBlobField).LoadFromStream(xMS);
  10.   finally
  11.     login2.ZConnection1.Connected:=True;
  12.     login2.zquery1.SQL.Clear;
  13.     login2.ZQuery1.SQL.Add('INSERT INTO skodadb (dokument) VALUES(:dokument)');
  14.     login2.ZQuery1.ParamByName('dokument').AsBytes:=xMS;
  15.     login2.ZQuery1.ExecSQL;
  16.     xMS.Free;
  17.   end;
  18.  
  19.  
  20.  


Ptam se asi blbe(omlouvam se ale nidky jsem to nepouzival)

 login2.ZQuery1.SQL.Add('INSERT INTO skodadb (dokument) VALUES(:dokument)');
 login2.ZQuery1.ParamByName('dokument').AsBytes:=edit2.text; ??jak sem dostanu ten stream?


Já používám u DB u polí které jsou BLOB něco takového:
Kód: Delphi [Vybrat]
  1. var
  2.   xMS: TMemoryStream;
  3. begin
  4.   xMS := TMemoryStream.Create;
  5.   try
  6.     xMS.LoadFromFile(aFileName);
  7.      xMS.Position := 0;
  8.      (ds.FieldByName('doExtension') AS TBlobField).LoadFromStream(xMS);
  9.   finally
  10.     xMS.Free;
  11.   end;
  12.  
  13.  

Vytvořím MemoryStream, načtu soubor, nastavím se ve streamu na začátek, a pak u Fieldu, který je BLOB načtu data ze streamu.

Pišu to částečně z praku (kromě toho načtení streamu), ale snad to bude vše.

Tomáš Zálešák

  • Host
uses System.IOUtils;

  login2.ZConnection1.Connected:=True;
  login2.zquery1.SQL.Clear;
  login2.ZQuery1.SQL.Add('INSERT INTO skodadb (dokument) VALUES(:dokument)');
//login2.ZQuery1.ParamByName('dokument').AsBytes:=edit2.text; ??jak tam dat soubor?
  login2.ZQuery1.ParamByName('dokument').AsBytes := TFile.ReadAllBytes(Edit2.Text); // předpokládám, že v Edit2.Text je celá cesta na soubor
  login2.ZQuery1.ExecSQL;

Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Tak jsem zkoušel tohle a nejde to:

function FileAsBytes(const aFileName: String): TBytes;
var
  xMS: TMemoryStream;
begin
  xMS := TMemoryStream.Create;
  try
    xMS.LoadFromFile(aFileName);

    SetLength(Result, xMS.Size);
    if xMS.Size > 0 then
      Move(xMS.Memory^, Result[0], xMS.Size);
  finally
    xMS.Free;
  end;
end;

procedure Tadministrace.Button4Click(Sender: TObject);
begin
    login.zquery1.SQL.Clear;
    login.ZQuery1.SQL.Add('INSERT INTO skoda2013.prislusenstvi (znacka,model,nazev,soubor) VALUES(:znacka,:model,:nazev,:soubor)');
    login.ZQuery1.ParamByName('znacka').AsString:=combobox4.text;
    login.ZQuery1.ParamByName('model').AsString:=combobox5.text;
    login.ZQuery1.ParamByName('nazev').AsString:=combobox6.text;
    login.ZQuery1.ParamByName('soubor').AsBytes := fileasbytes(edit6.Text);
    login.ZQuery1.ExecSQL;
end;

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 8
    • Verze Delphi: 7, XE6, Delphi 10.2 Tokyo
Kde a jakou to hlásí chybu ?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Len taký tip. Pri IB komponentoch musí mať pred prácou s parametrami Query.Close.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Chyba

Pouzivam Mysql server 5.1.


Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Prosim o radu...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Prečítaj si toto. To nevadí, že to je FB

http://forum.delphi.cz/index.php/topic,13589.0.html
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Nenasel jsem tam odpoved...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
To je škoda. Ale už len samotný predklad oznamu Ti jasne hovorí čo máš hľadať. Posielaš menej parametrov než je očakávaný.

Možnosti riešenia máš v podstate dve:

1) - najprv všetky parametre vymazať a potom ich znova vytvoriť. Za to ma silne zjazdili :D

2) - vytvoriť si samostatný komponent pre každé SQL a máš. Pokoj. Ja som svoj projekt takto prerábal dva dni. Viď aj debatu o globálnych premenných.

A musíš mať zapnuté niečo také:

ParameterCheck := True;
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.