AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze
Thema durchsuchen
Ansicht
Themen-Optionen

"Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

Ein Thema von Bodenseematze · begonnen am 21. Nov 2023 · letzter Beitrag vom 19. Dez 2023
Antwort Antwort
Seite 2 von 2     12   
Bodenseematze

Registriert seit: 10. Jul 2023
68 Beiträge
 
#11

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 7. Dez 2023, 14:15
Zitat von Bodenseematze:
Bezieht das jegliche VARCHAR-Spalten mit ein? Oder nur die "langen"?
Bezieht sich wohl auf alles, was nicht einer festen Länge entspricht. Und da fällt halt VarChar (leider) auch drunter.


Diese Frage verstehe ich nicht so recht. Bei den mir bekannten BDE-Komponenten TTable und TQuery gibt es keine Möglichkeit um jeweils SQL-INSERT/-UPDATE/-DELETE-Statements anzugeben.
Man kann über das TQuery-Property UpdateObject DeleteSQL, InsertSQL und ModifySQL-Statements angeben;
s.a. https://docwiki.embarcadero.com/Libr...t.UpdateObject
Und so ein UpdateObject habe ich bei TADOQuery nicht gefunden...
EDIT: auch FireDAC hat in seiner Query-Klasse TFDQuery ein UpdateObject ; auch die Interbase-Variante hat sowas - nur eben anscheinend die ADO-Variante nicht...

Zitat von Bodenseematze:
..., das bedeutet doch aber, dass man die Speicherung (wenn der SELECT auf einem nicht updatebare DB-View stattfindet) manuell machen muss, oder?
ja.
Das wäre doof - aber natürlich machbar (ggf. über eine Ableitung...)

Eigentlich ja. Wie kommen denn momentan die Daten in die Paradoxtabellen? Werden die Daten überhaupt zwingend als Datenbankdateien auf der Festplatte benötigt?
Vergiss' mal die Paradox-Tabellen - die sind "flach" und tabellenmäßig einfach und werden mit technischen Berechnungsergebnissen direkt vor dem Aufruf von CrystalReports gefüllt; dafür werden z.Zt. TTable-Objekte verwendet...

Die o.a. TQuery sind für die Abfrage und Änderung der Daten vom MS-SQLServer da - das ist (datenbanktechnisch) der wesentlich komplexere Teil...

Wenn nein, sollte es möglich sein an der Stelle, an der momentan die Daten in die Paradoxtabellen kommen, TClientDataSet bzw. TJvMemoryData (oder alles, was "irgendwie" von TDataSet abgeleitet wurde und nur im Speicher vorhanden ist) einzusetzen.
Ich bin da auf der Suche nach Beispielen / Erklärungen, wie das über Master-/Detail-Beziehungen mit Bezügen zu "echten" Datenbank-Datasets inkl. am besten gemacht wird...

Ich habe da noch eine (automatische) Hintergrund-Auswertung der TField-Objekte auf den Masken um geänderte Datenbankfelder optisch zu markieren - das sollte damit natürlich auch noch funktionieren / durdchführbar sein


Statt Paradox per BDE wäre aber auch noch der Einsatz von TDBF möglich.
Das schaue ich mir auf jeden Fall mal genauer an - das DBF-Format wäre tatsächlich eine Option; wobei dann ca. 150 Reportdateien angepasst werden müssten - das ist dann auch wieder eine nicht zu unterschätzender Aufwand.
Da gefällt mir die Möglichkeit, das über MS Paradox ODBC-Treiber zu lösen, wesentlich besser

Geändert von Bodenseematze ( 7. Dez 2023 um 15:38 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#12

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 7. Dez 2023, 15:58
Diese Frage verstehe ich nicht so recht. Bei den mir bekannten BDE-Komponenten TTable und TQuery gibt es keine Möglichkeit um jeweils SQL-INSERT/-UPDATE/-DELETE-Statements anzugeben.
Man kann über das TQuery-Property UpdateObject DeleteSQL, InsertSQL und ModifySQL-Statements angeben;
s.a. https://docwiki.embarcadero.com/Libr...t.UpdateObject
Und so ein UpdateObject habe ich bei TADOQuery nicht gefunden...
Jetzt arbeite ich schon seit gefühlt 'nem viertel Jahrhundert mit Delphi, aber die Property ist mir bei TQuery noch nicht aufgefallen Zeit für die Rente 'ne, hat TADO... nicht.

Eigentlich ja. Wie kommen denn momentan die Daten in die Paradoxtabellen? Werden die Daten überhaupt zwingend als Datenbankdateien auf der Festplatte benötigt?
Vergiss' mal die Paradox-Tabellen - die sind "flach" und tabellenmäßig einfach und werden mit technischen Berechnungsergebnissen direkt vor dem Aufruf von CrystalReports gefüllt; dafür werden z.Zt. TTable-Objekte verwendet...
TDBF könnte weitgehend mit TTable kompatibel sein, zumindest die Sachen, die für einfaches Datenrein, Datenraus genutzt werden.

Einkonstrukt TDBGrid - TDataSource - TTable kann problemlos in TDBGrid - TDataSource - TDBF umgewandelt werden, da beides Nachkommen von TDataSet. Überall dort, wo zwischen der Datenverarbeitung, Report, Datenanzeige ein TDataSource steckt, sollte daher TTable durch TDBF ausgetasucht werden können. Wie werden die TTables befüllt? Sinngemäß sowas?
Delphi-Quellcode:
  while not IrgendeineDBKomponente.EoF do begin
    TTable.Append;
    TTable.FieldByName('irgendwas').AsIrgendeinTyp := IrgendeineDBKomponente.Fields[0].AsIrgendEinType; // hier können auch Funktionsergebnisse hinterstecken ...
    ...
    TTable.Post
    IrgendeineDBKomponente.Next;
  end;
Das sollte mit TDBF funktionieren, grob gesagt: TTable wegwerfen und durch TDBF gleichen Namens ersetzen, wäre die einfachste Möglichkeit. Hoffentlich hast Du da das Glück, dass es so einfach geht.
Wenn nein, sollte es möglich sein an der Stelle, an der momentan die Daten in die Paradoxtabellen kommen, TClientDataSet bzw. TJvMemoryData (oder alles, was "irgendwie" von TDataSet abgeleitet wurde und nur im Speicher vorhanden ist) einzusetzen.
Ich bin da auf der Suche nach Beispielen / Erklärungen, wie das über Master-/Detail-Beziehungen mit Bezügen zu "echten" Datenbank-Datasets inkl. am besten gemacht wird...
Meinst Du über die Attribute MasterSource und MasterFields? Die hat TClientDataSet auch. Damit dürfte es eigentlich keine grundsätzlichen Unterschiede geben, aber wer weiß. Da müsst man jetzt echt mal in die Quelltexte Deiner Software schauen, um sinnvoll helfen zu können.
Ich habe da noch eine (automatische) Hintergrund-Auswertung der TField-Objekte auf den Masken um geänderte Datenbankfelder optisch zu markieren - das sollte damit natürlich auch noch funktionieren / durdchführbar sein
Hier wäre ich optimistisch, dass das durch Austausch der Datenbankkomponenten trotzdem transparent bleibt und "einfach" funktioniert.
Statt Paradox per BDE wäre aber auch noch der Einsatz von TDBF möglich.
Das schaue ich mir auf jeden Fall mal genauer an - das DBF-Format wäre tatsächlich eine Option; wobei dann ca. 150 Reportdateien angepasst werden müssten - das ist dann auch wieder eine nicht zu unterschätzender Aufwand.
Da gefällt mir die Möglichkeit, das über MS Paradox ODBC-Treiber zu lösen, wesentlich besser
Wenn die Minus Eins im Blobcache das Problem gelöst hat, wäre die Umstellung auf den ODBC-Treiber auch meine erste Option.
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
68 Beiträge
 
#13

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 7. Dez 2023, 17:15
[QUOTE=Delphi.Narium;1530533]
Jetzt arbeite ich schon seit gefühlt 'nem viertel Jahrhundert mit Delphi, aber die Property ist mir bei TQuery noch nicht aufgefallen Zeit für die Rente 'ne, hat TADO... nicht.


TDBF könnte weitgehend mit TTable kompatibel sein, zumindest die Sachen, die für einfaches Datenrein, Datenraus genutzt werden.
Ja, das schon - aber wie gesagt: der Aufwand liegt hier auf der Reportseite, wenn hier 150 Reports angepasst werden müssen
--> da werde ich versuchen, auf die Variante mit der MS Paradox-Schnittstelle umzustellen...


[QUOTE=Delphi.Narium;1530533]Wie werden die TTables befüllt? Sinngemäß sowas?
Delphi-Quellcode:
  while not IrgendeineDBKomponente.EoF do begin
    TTable.Append;
    TTable.FieldByName('irgendwas').AsIrgendeinTyp := IrgendeineDBKomponente.Fields[0].AsIrgendEinType; // hier können auch Funktionsergebnisse hinterstecken ...
    ...
    TTable.Post
    IrgendeineDBKomponente.Next;
  end;
Ja, und bei mir ist es sogar noch einfacher, weil die TTable immer nur einen Datensatz hat...

Meinst Du über die Attribute MasterSource und MasterFields? Die hat TClientDataSet auch. Damit dürfte es eigentlich keine grundsätzlichen Unterschiede geben, aber wer weiß. Da müsst man jetzt echt mal in die Quelltexte Deiner Software schauen, um sinnvoll helfen zu können.
Nein, ich meinte das prinzipielle Verhalten mit Events, Updates, Öffnen, Schließen, Sätze weiterschalten etc. und was ich (sinnvollerweise) wo und wie miteinander verknüpfen muss, um das Master-/Detail-Verhalten zu erreichen.

Wenn die Minus Eins im Blobcache das Problem gelöst hat, wäre die Umstellung auf den ODBC-Treiber auch meine erste Option.
Scheint aktuell so
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#14

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 7. Dez 2023, 18:23
TDBF könnte weitgehend mit TTable kompatibel sein, zumindest die Sachen, die für einfaches Datenrein, Datenraus genutzt werden.
Ja, das schon - aber wie gesagt: der Aufwand liegt hier auf der Reportseite, wenn hier 150 Reports angepasst werden müssen
--> da werde ich versuchen, auf die Variante mit der MS Paradox-Schnittstelle umzustellen...
Greifen denn die Reports direkt auf TTable / TQuery oder die Paradoxdateien zu oder liegt da noch 'ne TDataSource zwischen?
Liegt da noch 'ne TDataSource zwischen, sollte es reichen dieser beim DataSet "einfach" eine andere Datenbankkomponente zuzuweisen. Solange sich weder Spaltenname noch Spaltentyp ändern, sollte der Austausch der Datenbankkomponenten ohne weiteres funktionieren.

Report -> TDataSource -> TTable
kann man ändern in
Report -> TDataSource -> TDBF
oder
Report -> TDataSource -> TADOTable
oder
Report -> TDataSource -> TClientDataSet

Meinst Du über die Attribute MasterSource und MasterFields? Die hat TClientDataSet auch. Damit dürfte es eigentlich keine grundsätzlichen Unterschiede geben, aber wer weiß. Da müsst man jetzt echt mal in die Quelltexte Deiner Software schauen, um sinnvoll helfen zu können.
Nein, ich meinte das prinzipielle Verhalten mit Events, Updates, Öffnen, Schließen, Sätze weiterschalten etc. und was ich (sinnvollerweise) wo und wie miteinander verknüpfen muss, um das Master-/Detail-Verhalten zu erreichen.
Eigentlich ist das Meiste identisch. Alles, was von TDataSet geerbt wurde, stimmt überein.

Open, Close, BeforePost, AfterScroll, Active ... haben die alle und es verhält sich überall gleich. Auch die Zuweisung der Ereignisroutinen im Objektinspektor sollte gleich sein.

Hast Du für eine TTable z. B. eine Routine für AfterScroll, so kannst Du genau diese Routine auch 'ner TADO... beim AfterScoll zuweisen. Solange im Quelltext der Routinen nicht auf die Datenbankkomponente zugegriffen wird, sondern nur über den im Prozedurekopf übergebenen DataSet, sollte das transparent sein. Selbst wenn Du eine TTable durch eine TDBF ersetzt und der Name nicht verändert wird, sollte das problemlos gehen.

Z. B: Du hast eine TTable mit dem Namen Tail. Die schmeist Du nun weg und nimmst eine TDBF mit dem Namen Tail. Dann sollte das ohne weitere Änderung funktionieren, analog mit TADOTable oder TADOQuery, TClientDataSet, ...

Wenn die Minus Eins im Blobcache das Problem gelöst hat, wäre die Umstellung auf den ODBC-Treiber auch meine erste Option.
Scheint aktuell so
Das heißt dann ja zumindest schonmal, dass es an dieser Baustelle nicht brennt und Du in Ruhe nach der bestmöglichen Alternative suchen kannst.
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
68 Beiträge
 
#15

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 11. Dez 2023, 14:05
Greifen denn die Reports direkt auf TTable / TQuery oder die Paradoxdateien zu
Die Reports sind Dateien mit der Endung .rpt die ein eigenes, von Crystal Reports definiertes Format vorweisen.
Sie können nur mit CR geöffnet werden und greifen dann auf Datenbanken und Drucker etc. zu, indem sie die in CR zur Verfügung stehenden Schnittstellen verwenden;
Mit dem Delphi-Wrapper, der für ältere Delphi-Versionen von CR zur Verfügung gestellt wurde, hat man die Möglichkeit, diesen Reportdateien sozusagen Parameter mitzugeben, wie z.B. welche Datenbankverbindung sie verwenden sollen oder welche(n) Datensatz sie aus der Datenbank nehmen sollen oder welchen Drucker sie verwenden sollen;
und dann lässt sich über die Schnittstelle auch noch CR selber (grob) steuern, d.h. z.B. eine Druckausgabe anstoßen oder ein Vorschaufenster öffnen
(es geht noch mehr mit der Schnittstelle aber das ist es größtenteils, was in meinem Fall verwendet wird).
d.h. bzgl. Datenbankzugriff wird in meinem Fall den Reports beim Öffnen der MS SQL (bzw. ODBC)-Datenquellname mitgegeben sowie die ID des Master-Datensatz, den sie einlesen sollen sowie das Verzeichnis, in dem die lokale Paradox-Datenbank liegt.
Die Reportdateien selber wissen nichts von Delphi - oder den Komponenten in Delphi...

Das heißt dann ja zumindest schonmal, dass es an dieser Baustelle nicht brennt und Du in Ruhe nach der bestmöglichen Alternative suchen kannst.
Jein ich habe noch ein (neues) Problem, bei dem ich auch nicht so recht weiß, woher es kommt - das werde ich jetzt mal versuchen, in einem neuen Thema zu formulieren...

Auf jeden Fall habe ich noch eine mehrere eigene Hilfsklassen, in der Vereinfachungen für die Datenbank-Queries und die Datenbank selber enthalten sind - die waren sehr TQuery/TDatabase lastig; die stelle ich gerade um, so dass die Schnittstellen TDataSet und TCustomConnection sind und erst intern dann je nach tatsächlich übergebenem Typ (z.B. TQuery vs. TADOQuery) unterschieden wird und unterschiedliche Aufrufe durchgeführt werden bzw. Properties gesetzt / abgefragt werden.
Das als Vorbereitung, das noch weiter zu abstrahieren bzw. eine andere Datenbankschnittstelle zu verwenden...

Der Teil mit den TTable und der Füllung der Paradox-Dateien ist sowieso komplett extra - das könnte ich dann relativ getrennt vom Rest umstellen...
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
68 Beiträge
 
#16

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 19. Dez 2023, 08:53
Ich bin jetzt auf die ZeosLib gestoßen - sieht so auf den ersten Blick vielversprechend aus.

@Delphi.Narium: hast Du mit der vielleicht Erfahrung?

Allerdings müsste ich zur Verwendung für mein Szenario auf die Beta-Version v8 aufsetzen (damit auch ODBC-Verbindungen unterstützt werden).
Und die bekomme ich bei mir nicht mit / für Delphi 7 übersetzt.

Und das Forum dort ist auch ziemlich mühsam...
...da habe ich mich zwar angemeldet und eine entsprechende Frage gestellt - die Frage taucht aber noch nicht auf, weil erst ein Moderator die Frage freigeben muss (das war vor mehr als zwei Tagen).
Ich hoffe, das ist nur bei der ersten Frage ein Problem und danach muss nicht jeder einzelne Beitrag über einen Moderator freigeschaltet werden...

Auch deswegen meine Frage: lohnt es sich, sich mit der Library auseinanderzusetzen?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#17

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 19. Dez 2023, 09:13
Hallöle...
Zitat:
Auch deswegen meine Frage: lohnt es sich, sich mit der Library auseinanderzusetzen?
Ja.
Zitat:
Ich greife mit Delphi 7 über die BDE auf eine Datenbank auf einem MSSQL-Server 2019 (v15.0.4326.1) zu.
...wie du schon gesehen hast, geht es mit ZEOS.(ohne BDE)
Zitat:
Allerdings müsste ich zur Verwendung für mein Szenario auf die Beta-Version v8 aufsetzen (damit auch ODBC-Verbindungen unterstützt werden).
...warum ODBC? MSSQL und NativeTreiber 2012 sollte funktionieren. Download: https://www.microsoft.com/de-de/down....aspx?id=50402

PS: Persönlich hatte ich immer mit ODBC (MSSQL), auch der neueste, meine Probleme. (nicht unterstützte Funktionen = Fehler)

Geändert von haentschman (19. Dez 2023 um 10:31 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#18

AW: "Invalid BLOB handle in record buffer." bei 2. Durchlaufen der Datensätze

  Alt 19. Dez 2023, 11:49
Mit meinem Delphi 7 nutzte ich (zuweilen) ZeosLib 7.2.4-stable build at 2018-03-25 11:08:27 (https://sourceforge.net/p/zeoslib/ne...724-available/).

Wenn man dort im Objektinspektor zu eine TZConnection bei Protokoll ado auswählt und dann bei Database auf den ...-Button klickt, wird der Auswahldialog für ADO angezeigt. Dort kann man alles auswählen, was so mit ADO möglich ist. Darunter sind auch die ODBC-Treiber. Für ODBC muss also nicht zwingend die neueste Beta genutzt werden, die Delphi erst ab Tokyo unterstützt.

Da hier dann sowieso ADO genutzt wird, reicht es die bei Delphi 7 enthaltenen ADO-Komponenten zu nutzen. Die funktionieren und sind letztlich einfach zu handhaben und auch der Weg des geringsten Widerstandes. Man nutzt einfach das, was sowieso schon (neben der BDE) dabei ist.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 02:48 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