AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird: Incorrect values within SQLDA structure

Firebird: Incorrect values within SQLDA structure

Ein Thema von DJ-SPM · begonnen am 15. Apr 2012 · letzter Beitrag vom 16. Apr 2012
Antwort Antwort
Benutzerbild von DJ-SPM
DJ-SPM

Registriert seit: 19. Mai 2003
Ort: Gründau
2.406 Beiträge
 
Delphi 2009 Architect
 
#1

Firebird: Incorrect values within SQLDA structure

  Alt 15. Apr 2012, 20:05
Datenbank: Firebird • Version: 2.5 • Zugriff über: UniDAC
Hallo,

hier der nächste Fehler, den ich auch nach dem Googeln nicht beheben kann. Bei einer Update-Query eines Blob-Felder kommt - manchmal - folgende Fehlermeldung

Zitat:
Incorrect values within SQLDA structure.
Habe ihn gegoogelt und nur die Antwort gefunden, dass es sich um die falsche fbclient.dll/fbembed.dll handelt. Das kann in meinem Fall aber nicht ganz sein. Aber von Anfang an:

Ich habe eine 2.1-DB und mache ein Update auf 2.5

1. Neueste Firebird-Embedded-Dateien (v2.5) in der App-Verzeichnis kopieren
2. Mit gbak die 2.1-er DB sichern
3. Unter Verwendung der neuen DLLs eine neue (2.5) DB erzeugen
(CREATE DATABASE ''test.db'' USER ''sysdba'' PASSWORD ''1234'' PAGE_SIZE 4096 DEFAULT CHARACTER SET UTF8)
4. Mit gbak die Daten zurücksichern (Optionen: gbak.exe -R o -v)
5. Alles fertig.

Alles funktioniert. Nun fülle ich in einer Schleife ganz viele Blob-Text-Felder und irgendwann erscheint einfach o.g. Meldung. Die Blob-Daten werden als Parameter übergeben.

EDIT: Lasse ich das Update komplett weg und fülle einfach die alte DB unter Verwendung der neuen DLL mit den BLOB-Daten, klappt alles. Könnte also am CREATE DATABASE liegen, oder?

Was könnte die Ursache dafür sein?

Danke im Voraus für eure Geduld und Hilfe!
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
426 Beiträge
 
#2

AW: Firebird: Incorrect values within SQLDA structure

  Alt 16. Apr 2012, 09:35
Was bringt dir das Erzeugen der Datenbank mit CREATE DATABASE, wenn du eh ein Restore machst?
  Mit Zitat antworten Zitat
Benutzerbild von DJ-SPM
DJ-SPM

Registriert seit: 19. Mai 2003
Ort: Gründau
2.406 Beiträge
 
Delphi 2009 Architect
 
#3

AW: Firebird: Incorrect values within SQLDA structure

  Alt 16. Apr 2012, 11:14
Hi,

ich wollte erreichen, ein Update der Firebird-DB von Version 2.1 auf 2.5 zu machen, und zwar durch ein automatisches Programmupdate beim Kunden (Internet-Download, d.h. ich kenne die Kunden/Benutzer nicht und kann daher nicht eingreifen).

Also wurde mir geraten, mit gbak ein Backup zu machen, eine neue Datenbank über die 2.5-er Lib zu erstellen und das Backup wieder einzuspielen. Ich habe das in einem anderen Thread schonmal gepostet, aber hier nochmal meine Vorgehensweise und dann die Frage: Habe ich jetzt eine richtige 2.5er Datenbank? Der Fehler ist übrigens mit der Umstellung auf AsMemo erstmal verschwunden.

-------
Backup via gbak.exe
gbak.exe -b -g -z -v -i -IG -user SYSDBA test.db test.db.bak

Umbennen test.db -> test_tmp.db (nur, damit ich zur Not auf sie wieder zurückgreifen kann)

Neue DB erstellen via SQL-Query:
CREATE DATABASE ''test.db'' USER ''sysdba'' PASSWORD ''1234'' PAGE_SIZE 4096 DEFAULT CHARACTER SET UTF8

Restore via gbak.exe
gbak.exe -R o -v -user sysdba -password 1234 test.db.bak test.db

Neues Feld erstellt via SQL-Query:
ALTER TABLE test1 ADD PLAINTEXT BLOB SUB_TYPE TEXT;
-------

Ich kenne mich mit Firebird noch nicht so gut aus.

Danke
  Mit Zitat antworten Zitat
exilant
Online

Registriert seit: 28. Jul 2006
109 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Firebird: Incorrect values within SQLDA structure

  Alt 16. Apr 2012, 11:48
Das erstellen mittels "create database" kannst du dir schenken. Die Datenbank wird von GABK -R o überschrieben. IMO ist es nicht möglich, bei einer existierenden Datenbank den DEFAULT CHARSET von NONE auf UTF8 zu ändern. Da wird dir vermutlich nur das umpumpen der Daten bleiben.

Siehe auchhttp://tech.groups.yahoo.com/group/f...message/110424
Es gibt 10 Sorten von Menschen: Die einen können Binärzahlen lesen, die anderen nicht.
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
426 Beiträge
 
#5

AW: Firebird: Incorrect values within SQLDA structure

  Alt 16. Apr 2012, 11:49
Mit dem "gbak -R ..." Restore überschreibst du die mit CREATE DATABASE erstellte Datenbank, darum macht das CREATE DATABASE keinen Sinn. Der Umstieg von 2.1 auf 2.5 kann High-Level mäßig wie folgt skizziert werden:

1) Backup der Datenbank mit Firebird 2.1
2) Restore der Datenbank mit Firebird 2.5

Hiermit bekommst du eine Datenbank mit einer Firebird 2.5 ODS (On-Disk-Structure). Firebird 2.5 kann sich allerdings auch auf eine Firebird 2.1 ODS Datenbank verbinden, d.h. um Firebird 2.5 mit einer 2.1 Datenbank zu verbinden, ist notwendigerweise kein Backup/Restore notwendig, aber es wird empfohlen.

In 2) könnte sich allerdings herausstellen, dass "Malformed-String" Einträge in [VAR]CHAR / BLOB Felder enthalten sind, dann müßte man im Schritt 2) die unterschiedlichen -FIX Parameter von gbak.exe anwenden. Bzgl. Backup/Restore mußt du nicht notwendigerweise über gbak.exe gehen, sondern könntest auch ein Backup/Restore über die Services API in deine Anwendung direkt integrieren, sofern UniDAC dieses Firebird-Spezifikum unterstützt. IBDAC hat fürs Backup/Restore spezielle Komponenten, wobei ich jetzt nicht sagen kann, ob die -FIX Parameter hier auch unterstützt werden.

EDIT: Ich denke, ich kapiere nun, dass du auch eine Zeichensatz-Umstellung von NONE auf UTF8 vorhast? Da hilft dir kein Backup/Restore.

Geändert von tsteinmaurer (16. Apr 2012 um 11:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DJ-SPM
DJ-SPM

Registriert seit: 19. Mai 2003
Ort: Gründau
2.406 Beiträge
 
Delphi 2009 Architect
 
#6

AW: Firebird: Incorrect values within SQLDA structure

  Alt 16. Apr 2012, 12:13
Hallo,

ja ganz richtig. Ich möchte einen Default-Characterset angeben. Ich muss aber im Vorfeld dazu schreiben, dass ich sowieso alle Felder und Daten im UTF8-Format gespeichert habe. Die ganze DB ist UTF8 und alle Daten darin auch. Der einzige Unicode-Fehler - der hier die letzten Tage diskutiert wurde - war der, dass ich nicht AsMemo, sondern AsString im BLOB gespeichert habe.

Also nur Backup und Restore mit gbak machen und das CREATE DATABASE rausschmeißen? Kann ich nachträglich einen Defaul-Charset angeben? Wenn ja sowieso schon immer alles UTF8 war dürfte ja nichts passieren und ich könnte mir das Eintragen der Charsets bei den Feldern sparen.

Wie kann ich prüfen, ob ich nun wirklich eine 2.5er-DB habe?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf