Forum Delphi.cz

Databáze => MS SQL => Téma založeno: pepak 15-11-2012, 12:52:44

Název: Insertování binárních dat z Delphi
Přispěvatel: pepak 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).
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: pepak 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ží...
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: pepak 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;
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: Fala 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;
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: Radek Červinka 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
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: rustymattock 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
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: addme 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?
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: Radek Červinka 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.
Název: Re:Insertování binárních dat z Delphi
Přispěvatel: Daniel_Andrascik 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 (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...