Autor Téma: Insertování binárních dat z Delphi  (Přečteno 2965 krát)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1249
  • Karma: 28
    • Pepak.net
Insertování binárních dat z Delphi
« kdy: 15-11-2012, 12:52:44 »
Ahoj,

máte někdo nápad, jak co nejlépe z Delphi vkládat binární data do MSSQL databáze? Potřebuju, aby to umělo libovolné bajty (tzn. ne že to spadne na binární nule) a aby jich to umělo řekněme 100 KB. Teď používám jednoduše:
Kód: SQL [Vybrat]
  1. INSERT INTO tabulka(image_sloupec) VALUES (0x11223344abcdef...00000001)
Ale to mi už někde u 3 KB padá na "Data would be truncated" (MSSQL 2008, Delphi XE2, TADOQuery).

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1249
  • Karma: 28
    • Pepak.net
Re:Insertování binárních dat z Delphi
« Odpověď #1 kdy: 15-11-2012, 13:08:16 »
Hmm, zjevně je to nějaká zavádějící hláška, protože dvakrát delší soubor se mi uloží...

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1249
  • Karma: 28
    • Pepak.net
Re:Insertování binárních dat z Delphi
« Odpověď #2 kdy: 15-11-2012, 13:13:34 »
No nic, problem solved, ta hláška se týkala jiného fieldu.

Kdyby to někdo hledal, tak ten INSERT zřejmě bude fungovat, ale mezitím jsem to přepsal na stored parameters a to funguje taky:
Kód: Delphi [Vybrat]
  1. Query.Sql.Text := 'INSERT INTO tabulka(image_sloupec) VALUES (:data)';
  2. Query.ParamCheck;
  3. Query.Parameters.ParamByName('data').LoadFromStream(...);
  4. Query.ExecSql;

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:Insertování binárních dat z Delphi
« Odpověď #3 kdy: 15-11-2012, 20:41:34 »
přesně tak, musíš to dělat přes parameters.
ještě bych doporučoval v tom streamu, ze kterého to bereš dát position := 0;

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1623
  • Karma: 67
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (teď XE8 a XE10)
    • O Delphi v češtině
Re:Insertování binárních dat z Delphi
« Odpověď #4 kdy: 15-11-2012, 21:35:56 »
přesně tak, musíš to dělat přes parameters.
ještě bych doporučoval v tom streamu, ze kterého to bereš dát position := 0;

Hmm, ja celkem spokojeně používám

Kód: [Vybrat]
        oFileStream.Position := 0;
        (Dataset.FieldByName('doFile') as TBlobField).LoadFromStream(oFileStream);

Nebo mi něco uniklo?

ADO x MS SQL-  D5, D2007, DXE
Embarcadero MVP - Czech republic

rustymattock

  • Host
Re:Insertování binárních dat z Delphi
« Odpověď #5 kdy: 19-11-2012, 19:02:37 »
Zdravím kluci...

Potřeboval bych od vás základní připojení k MSSQL (jednoduchý kód, nebo správné vyplnění vizuální komponenty)
Nejlépe pro komponentu ZEOS (ale případně si nechám poradit). Mě tam píše, že servr neexistuje, nebo byl odepřed přístup.
Připojení a práce s MySQL je bez problémů, ale MSSQL vidím porvé v životě a bohužel se mu nemůžu vyhnout
Delphi 7
MSSQL 2008

děkuji

Offline addme

  • Příspěvků: 1
  • Karma: 0
    • Verze Delphi: master gee kiddan
Re:Insertování binárních dat z Delphi
« Odpověď #6 kdy: 31-01-2014, 13:22:32 »
máte někdo nápad, jak co nejlépe z Delphi vkládat binární data do MSSQL databáze?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1623
  • Karma: 67
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (teď XE8 a XE10)
    • O Delphi v češtině
Re:Insertování binárních dat z Delphi
« Odpověď #7 kdy: 31-01-2014, 14:21:40 »
Já používám
(oField as TBlobField).LoadFromStream(oMemZipStream);

kde oField je Field s blobem, oMemZipStream je nějaký stream. Dataset je otevřen pro Editaci. Pak jen stačí Post.
Embarcadero MVP - Czech republic

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 392
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:Insertování binárních dat z Delphi
« Odpověď #8 kdy: 04-02-2014, 17:24:57 »
To rustymattock:

Ja som pripojenie na MSSQL 2012 cez zeos riesil v tomto vlakne kde v poslednom prispevku uvadzam funkcny priklad pripojenia. Konkretne som tam riesil pripojenie na SQL Server Express LocalDB, co je vynikajuce na zaciatok na pokusy, nemusis instalovat miliongigovy SQL server.

http://zeoslib.sourceforge.net/viewtopic.php?f=22&t=6106

Ale, pouzivam tam zo zeosu len ZDBC api vrstvu (skvela vec, ziadne shit vcl komponenty a ziaden dataset), ale ak sa vyznas v ZEOSe dokazes to aplikovat aj na VCL komponenty. Druha vec je ze tam nepouzivam ADO pristup ale pripajam sa cez SQL Native Client. To je nejaky mikrosoftacky recomended driver pre ich MSSQL server a myslim ze bol zavedeny uz pri starsich MSSQL ako 2012, ale neviem naisto. Cize musis mat okrem Servra, alebo LocalDB nainstalovny tento SQL Native Client.

Snad ti to aspon trochu na rozlet pomoze...



 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: