| Autor |
Beitrag |
Hendrik
      
Beiträge: 324
|
Verfasst: Do 31.01.08 14:28
Hey!
Wenn ich versuche einen Blob in der Datenbank über
Delphi-Quelltext 1: 2: 3:
| table.edit; table.fieldbyname('Feld').asstring:=strinlist.text; table.post; |
zu ändern, bekomme ich folgende Fehlermeldung:
| Zitat: |
Connection is not defined
invalid BLOB ID
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. |
Was mache ich falsch? Zur Info: Ich benutze Firebird 2.0 mit Zeos 5.5.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Do 31.01.08 18:45
Blobs besser per Stream in einen Parameter schreiben.
_________________ Markus Kinzler.
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: Do 31.01.08 18:50
Ich konnte das Auftreten jetzt etwas näher eingrenzen:
Er tritt auf beim Ändern eines zweiten Blob-Feldes.
Also beispielsweise funktioniert folgendes:
Delphi-Quelltext 1: 2: 3:
| table.edit; table.fieldbyname('blob1').asstring:=strinlist.text; table.post; |
Das kann ich so oft ich will hintereinander machen. Ändere ich nun ein zweites Blob-Feld:
Delphi-Quelltext 1: 2: 3:
| table.edit; table.fieldbyname('blob2').asstring:=strinlist.text; table.post; |
Kommt der o.g. Fehler. Schließe und öffne ich die Tabelle vor dem Bearbeiten, klappt es ohne Probleme...
Welche Banalität hab ich übersehen bzw. nicht bedacht?
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: Do 31.01.08 19:10
mkinzler hat folgendes geschrieben: | | Blobs besser per Stream in einen Parameter schreiben. |
Da ich die Felder gerne direkt über ein DBMemo bearbeiten würde, ist das etwas blöd... Muss ich vielleicht bei AfterPost irgendeinen Befehl eingeben?
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 31.01.08 19:12
DBMemo?
Dann nimm dafür doch ein varchar also String-Feld.
Blob ist eigentlich dafür gedacht, echte Daten (Bilder, (verschlüsselte) Dateien, usw) zu speichern.
Und wegen dem AfterPost:
Nö, normal nicht. Einfach Edit -> Neuen Wert rein -> Post, fertig.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 31.01.08 19:47
Xentar hat folgendes geschrieben: | | ..Blob ist eigentlich dafür gedacht, echte Daten (Bilder, (verschlüsselte) Dateien, usw) zu speichern... |
Wieso denn das ?  Noch nie was davon gehört, das es da Subtypes (Binary/Text) gibt ? DBMemo ist u.a. gedacht für Text-Blobs.
_________________ Gruß
Hansa
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: Do 31.01.08 20:06
Xentar hat folgendes geschrieben: | DBMemo?
Dann nimm dafür doch ein varchar also String-Feld.
Blob ist eigentlich dafür gedacht, echte Daten (Bilder, (verschlüsselte) Dateien, usw) zu speichern.
|
Das hab ich auch schon versucht... Aber dann bräuchte ich 8 32000 Zeichen Varchar Felder und da hat er gemeckert, weil es wohl zu viel ist...
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 31.01.08 20:20
Du brauchst zu den Blobs etwas mehr Infos. Lemmy hat die : www.delphitutorials....lobs-in-ib-fb-2.html
@Lemmy : das da war schwer wiederzufinden. 
_________________ Gruß
Hansa
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: Do 31.01.08 21:04
Ja das ist soweit schon klar... Ich habe 80-Byte Typ 1 Blobs in der Tabelle definiert. Aber ich kann pro Tabelle nur max. einen (auch über DBMemo) bearbeiten. Da sollte ich ja noch irgendwas verbockt haben?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 31.01.08 21:29
Hendrik hat folgendes geschrieben: | | ...Da sollte ich ja noch irgendwas verbockt haben? |
Nicht unbedingt. Das "nur einen" stört mich im Zusammenhang mit Zeos. Da geht auch "nur eine" Transaction (EDIT :pro Datenbankverbindung). Nicht, dass da irgendwo eine zweite im Spiel ist.  Das stammt allerdings jetzt nicht von mir, sondern von der Glaskugel.  Ich würde versuchen, das Problem zu reduzieren und somit die Grenzen ausloten, wenn es sie denn geben sollte.
_________________ Gruß
Hansa
|
|
Hendrik 
      
Beiträge: 324
|
Verfasst: Do 31.01.08 21:49
Ja ich kann natürlich mehrere Blobs innerhalb eines Edit --> Post ändern. Aber danach nur noch die, die da drin standen...
Jetzt hab ich es umgangen, indem ich vor jedem Bearbeiten die Table schließe und wieder öffne, aber wirklich "sauber" ist das nicht 
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 01.02.08 00:31
Hendrik hat folgendes geschrieben: | ...Jetzt hab ich es umgangen, indem ich vor jedem Bearbeiten die Table schließe und wieder öffne, aber wirklich "sauber" ist das nicht  |
Wenn das geht, dann sind es wohl tatsächlich die Transaction-Einschränkungen bei Zeos.  Bei Freeware-Komponenten kann das passieren.
_________________ Gruß
Hansa
|
|