AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi INSERT mit BLOB Feld
Thema durchsuchen
Ansicht
Themen-Optionen

INSERT mit BLOB Feld

Ein Thema von Quake · begonnen am 14. Apr 2004 · letzter Beitrag vom 16. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#1

INSERT mit BLOB Feld

  Alt 14. Apr 2004, 15:58
Moin Moin,

mein Problem ist es ein kleines Byte-Array beim INSERT in ein BLOB-Feld zu schreiben.

Code:
IBSQL.SQL.Text:=('insert into MYTABELLE (ID,MYFELD1,MYBLOB) values (123,'Test',???);'
IBSQL.ExecQuery;
IBSQL.SQL.Text:='commit';
IBSQL.ExecQuery;
IBSQL.Close;
Was muß da hin wo ich die drei Fragezeichen stehen habe?

MFG

Quake
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 08:28
Geht das evtl. mit einem Stream am besten oder mit FieldByName('MyBLOB')?
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 08:55
Dein Vorhaben schreit förmlich nach einer Spalte, die als Collection deklariert wird.
Wenn du mit Komponenten auf deine DB zugreifst, die ihre API kapseln, kannst du die Collection als Objekt in Delphi beschreiben und ganz easy als Parameter an dein Statement übergeben.
Voraussetzung dafür ist eine DB, die OOP unterstützt sowie Zugriffskomponenten ohne Mid.-ware (kein ODBC oder ADO!).
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 09:49
Sorry, aber ich nix verstehen

Ich habe doch schon eine Tabelle in einer InterBase DB und in dieser ist die ein Spalte ein BLOB Feld.
Ich füge per Code mittels SQL einen Datensatz hinzu. Das funzt auch 100pro. Ich habe jetz nur keine Plan,
wie ich mein Byte-Array in die Blob-Spalte bekomme. Das Array ist so zwischen 5 und 50 Byte groß.

ciao
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#5

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 10:20
hi,

hier werden sie geholfen *g*

Gruß
Ken
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 10:22
Byte-Array?
Dann speichere ihn doch als Text.
Du kannst doch jedes Byte als Buchstabe ( chr(ByteArray[Index] ) in einen String schreiben. Der landet dann in deinem LOB (vielleicht wäre ein CLOB besser geeignet -> Character Large Object)
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 11:26
Ich probier es mal aus.

Vielen Dank schon mal.

Aber eine Frage noch. Gibt es Probleme mit z.B Null-Bytes (Nicht die Anzahl sondern der Wert des Bytes) im String?
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 12:47
jupp ,
Das wäre ein Problem.
Der String endet beim ersten #0.

Aber du kannst den Array auch direkt in die DB schreiben (mit ADO müsste es so gehen, dürfte mit dem IB-Zeugs ähnlich ablaufen):

Schreiben:
  • xyz :Array of Byte
Delphi-Quellcode:
  With ADOQuery Do
  Begin
    SQL.Text :=
      'Insert INTO MyTabelle' + #10 +
      ' (ID, MyFeld1, MyBlob)' + #10 +
      'VALUES' + #10 +
      ' (:i_ID, :i_MyFeld1, :i_MyBlob)';
    Prepared := True;
    With Parameters Do
    Begin
      ParamByName('i_ID').Value := '1';
      ParamByName('i_MyFeld1').Value := 'Test';
      With ParamByName('i_MyBlob') Do
      Begin
        DataType := ftBlob;
        Value := xyz;
      End;
    End;
    ExecSQL;
  End;
Auslesen:

  • xyz :Array of Byte
  • i :Integer
  • OutStr :string

Delphi-Quellcode:
  With ADOQuery Do
  Begin
    SQL.Text :=
      'SELECT *' + #10 +
      'FROM MyTabelle';
    open;
    While Not Eof Do
    Begin
      OutStr := OutStr + #10 +
        FieldByName('ID').asString + ':';
      With FieldByName('MyBlob') As TBlobField Do
      Begin
        SetLength(xyz, BlobSize);
        xyz := CurValue;
      End;
      For i := low(xyz) To high(xyz) Do
        OutStr := OutStr + #10 + ' -> ' + IntToStr(xyz[i]);
      Next;
    End;
  End;
  Delete(OutStr, 1, 1);
  ShowMessage(OutStr);
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 13:29
Ja genau, das ist das was ich suche, bloß es funzt mit IB nicht.

Code:
 .
 .
IBSQL.Text :=
      'Insert INTO MyTabelle' + #10 + 
      ' (ID, MyFeld1, MyBlob)' + #10 + 
      'VALUES' + #10 + 
      ' (:i_ID, :i_MyFeld1, :i_MyBlob)';
IBSQL.Prepare;
IBSQL.Params.ByName(':i_MyFeld1').Value:='Test';
IBSQL.ExecQuery;
 .
 .
Ich bekomme in der 'Params'-Zeile die Fehlermeldung ':i_MyFeld1 konnte nicht gefunden werden'.

Oder muss ich erst den Datensatz einfügen und danach mit Update und deiner Methode mein BLOB mit Daten füllen?

Noch eine Frage sind folgende Zeilen von der Funktion her identisch?
Code:
FieldByName('MyBlob') As TBlobField
TBlobField(FieldByName('MyBlob'))
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: INSERT mit BLOB Feld

  Alt 15. Apr 2004, 16:26
Dein Parameter heißt i_MyFeld1 ohne das : !!!
Der : ist nur dafür da, damit der Paramter im Statement als solcher erkannt werden kann.
Außerdem solltes du i_MyBlob auch einen Wert übergeben
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz