Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   MySQL mit Delphi (https://www.delphipraxis.net/102109-mysql-mit-delphi.html)

Bernhard Geyer 6. Mär 2008 10:19

Re: MySQL mit Delphi
 
Ich glaube nicht das das Programm für VCL.NET entwickelt wurde. Bitte beim Öffnen in D2005 das Projekt nicht nach VCL.NET wandeln lasssen.

croid 6. Mär 2008 17:28

Re: MySQL mit Delphi
 
Ah, ich habe das Problem gefunden. Wenn ich die Datein für WIN 32 öffne geht es, mit .NET geht es nicht...

xZise 10. Jun 2008 18:32

Re: MySQL mit Delphi
 
Du hast übrigens nirgends beschrieben, welche Fehlermeldungen bei _connect wiedergegeben werden könnten.

Außerdem bleiben folgende Fragen offen:
  • Einträge anzeigen: Wie kann ich mir die selektierten Einträge "Angeben" lassen
  • Anzahl zählen: Wie viele Einträge hat die Tabelle? Reicht "mysql_row_count"? (Gibt es ja gar nicht)

MfG
xZise

delnu 27. Jul 2013 10:10

AW: MySQL mit Delphi
 
Hallo ! :hi:

Was muß ich machen, damit das Beispiel aus dem Tutorial auch mit der neueren Version der Unit "mysql" http://www.audio-data.de/mysqlfrde.html funktioniert ? Da sind nämlich gute Beispiele mit bei, aber die Unit wurde leider inkompatibel weiter entwickelt, so daß alte Sachen mit der neuen Unit nicht funktionieren und neue Sachen nicht mit der alten Version.

Kann mir da jemand helfen ? Ich habe lange nichts mehr mit Delphi gemacht :pale:, benutze vor allem noch Delphi 5, mit dem diese Sachen mit geringfügigen Anpassungen zum Glück noch funktionsfähig sind.

Schon mal jetzt Danke für die Mühe ! :smile2:

p80286 27. Jul 2013 10:38

AW: MySQL mit Delphi
 
Was funktioniert denn nicht?

Ehrlich gesagt, habe ich keine Lust mir ein MySQL und diese Unit zu besorgen und dann das Zusammenspiel zu analysieren. Und Zeit erst recht nicht

Gruß
K-H

delnu 27. Jul 2013 11:09

AW: MySQL mit Delphi
 
Zitat:

Was funktioniert denn nicht?
Die neue Unit ist stark erweitert und die Zugriffe sind anders.

Beispiel:

alte Unit
Code:
  PMYSQL_FIELD = ^TMYSQL_FIELD;
  TMYSQL_FIELD = record
    name: pChar;             // Name of column
    table: pChar;            // Table of column if column was a field
    def: pChar;              // Default value (set by mysql_list_fields)
    _type: enum_field_types; // Type of field. Se mysql_com.h for types
    length: longword;        // Width of column
    max_length: longword;    // Max width of selected set
    flags: longword;         // Div flags
    decimals: longword;      // Number of decimals in field
  end;
neue Unit
Code:
  TMYSQL_FIELD = TMYSQL_FIELD401;
  PMYSQL_FIELD = Pointer;
Im Beispielprogramm ( AdressDBSQL ) wird z.B. "Cols[i] := Field.Name;" bemängelt und das ist bei der anderen Pointer-Deklaration kein Wunder. Kommentiere ich die Zeile aus, kommen zwar keine weiteren Fehlermeldungen, aber es funktioniert eben auch nichts.

Zitat:

Ehrlich gesagt, habe ich keine Lust mir ein MySQL und diese Unit zu besorgen und dann das Zusammenspiel zu analysieren. Und Zeit erst recht nicht
Dann frage ich mich, wieso Du Dich dann überhaupt dazu äußerst. Mir ging es drum, daß vielleicht jemand, der auch damit arbeitet, etwas darüber weiß.

Die neue Unit ist zweifelsfrei erheblich besser, aber eben leider nicht kompatibel zur alten gehalten worden, obwohl sie auf dieser beruht.

Medium 27. Jul 2013 22:23

AW: MySQL mit Delphi
 
Probiere es mal mit
Delphi-Quellcode:
Cols[i] := TMYSQL_FIELD(Field).Name;
. Es liegt übrigens durchaus beim Fragesteller, alle Infos beizubringen, die zu seiner Problemlösung hilfreich sein könnten. Hier sind viele hilfsbereite Leute, und wenn meine Idee hier klappt, war es nichtmals nötig die genannte Unit jemals gesehen zu haben um das Problem zu lösen. Aber die Codefetzen waren dafür unverzichtbar. Bedenke immer: Dein Kopf ist dir ganz allein deiner, und überhaupt jemanden mit exakt den selben Problemen zu finden, die man selbst hat, ist eine Nadel-im-Heuhaufen-Aufgabe. Du tust dir selbst einen großen Gefallen, wenn du möglichst viele potenzielle Helfer erreichts, in dem du umfangreicher informierst. (Oftmals ist sogar das Eindampfen auf die relevanten Infos zu einer Frage schon genug, um sich selbst zu helfen.) Gewillte Helfer schräg anzufahren bringt dir herzlich wenig.

delnu 28. Jul 2013 03:00

AW: MySQL mit Delphi
 
Hallo ! :hi:

Der Tipp funktioniert so nicht = "ungültige Typ-Umwandlung", ist aber doch schon erstaunlich nah dran, wie ich später sah, obwohl das nicht alles war. Die Fehlermeldung beim eigentlichen Quelltext an der Stelle ist übrigens = "Record, Objekt oder Klassentyp erforderlich".

Es war keineswegs unhöflich, zu fragen, wieso sich jemand äußert, der nichts zum Thema beitragen kann, weil er die Sachlage nicht kennt und sich auch nicht einarbeiten will. Die wirkliche Fehlerquelle sitzt in der inkompatiblen Umgestaltung der erweiterten, neuen Unit. Und genau diese Infos hatte ich gegeben. Nach wie vor bin ich der Ansicht, daß es in manchen Fällen (so wie hier) wenig hilft, zu versuchen, an Symptomen rumzudoktern, ohne das Ganze zu kennen. Weil das alles nicht von mir stammt, war es darum völlig sachgerecht, die Quelle der neuen Unit (nebst Beispielen) zu nennen. Die alte mit Beispiel ist ja hier in diesem Thread erwähnt, der Bestandteil des Tutorials ganz genau dazu ist.

Insofern ging ich davon aus, daß sich (falls überhaupt) genau solche Menschen dazu äussern, die auch damit arbeiten und wissen, wovon die Rede ist, und sich deshalb damit zurechtfinden oder eben jemand, der genügend Kenntnisse und Interesse hat, sich entsprechend ganz neu einzuarbeiten.

Es war wirklich nicht böse gemeint, aber wenn das alles einfach wäre, hätte ich nicht gefragt.:oops:

Ohne die alte Unit "MYSQL.PAS" (Papier-Ersparnis, weil sie kleiner als die neue ist) auszudrucken und mit der neuen zu vergleichen, hätte ich die Lösung selbst sicherlich auch nie gefunden. Es ging in diesem Fall also wirklich nicht ohne Durchsicht der Quellen, nicht mal mit Bildschirm-Direktvergleich. Und es war Glück, daß sich die Problemlösung letztlich als trivialer heraus stellte, als ich befürchtet hatte.

Nun weiß ich also mehr und kann damit vielleicht selbst anderen helfen, die auch dieses Problem haben/hatten und nicht zu lösen wußten :

Beim Vergleich der originalen Unit mit der neuen fiel mir zunächst auf, daß bei der neuen Unit eine Compiler-Anweisung {$DEFINE DONT_LOAD_DLL} existiert, die verhindert, daß im INITIALIZATION-Teil die "libmysql.dll" (im Gegensatz zum Original) automatisch geladen wird.

Im Beispiel "AdressDBSQL" muß dies dann also manuell innerhalb von "Unit1" gleich zu Beginn als Erstes in "Formcreate" erfolgen = "libmysql_load(nil);"

Dann muß die kritische Zeile zu "Cols[i] := TMYSQL_FIELD(field^).name; //Field.Name;" geändert werden, und das Beispielprog funktioniert daraufhin gleichermaßen mit alter oder neuer Unit "MYSQL.PAS" !

samso 31. Jul 2013 14:19

AW: MySQL mit Delphi
 
Einer der Ziele bei der neuen mysql.pas war es, zu erreichen, dass die Schnittstelle weitgehend unabhängig von der Version der zugrunde liegenden libmysql.dll wird. Das genau ist nicht gegeben, wenn man direkt mit den Zeigern arbeitet. Leider wurden die internen Strukturen lange Zeit über die verschieden Versionen verändert (das ist der Kern des Problems, weshalb die neue mysql.pas nur begrenzt kompatible ist).
Gleichzeitig gab für bestimmte Werte keine entsprechenden Abfragefunktionen. Erst bei den neuen Versionen (der DLL) hat man anscheinend erkannt, dass das ständige Ändern der internen Strukturen bei statisch gelinkten Bibliotheken kein Problem ist, wohl aber bei dynamisch geladenen Bibliotheken, wie z.B. DLLs. Aus diesem Grund gibt es bei der mysql.pas zusätzliche Funktionen, die den Zugriff auf bestimmte Parameter von der internen Struktur abschirmt. Dazu gehören:

mysql_field_name
mysql_field_tablename
mysql_field_default
mysql_field_type
mysql_field_flag
UpdateField

Wie gesagt, diese Funktionen können unabhängig von der verwendeten DLL verwandt werden und deshalb sollten diese Funktionen bevorzugt eingesetzt werden. "Richtig" im Sinne der neuen mysql.pas wäre also

Cols[i] := mysql_field_name(field);

delnu 1. Aug 2013 00:18

AW: MySQL mit Delphi
 
Vielen Dank für die Erläuterungen ! :hi:

Endlich mal jemand, der sich auskennt. :thumb:

Die Zuweisung Cols[i] := mysql_field_name(field); hatte ich nach einer Weile auch rausgefunden, mich dann aber doch für die von mir genannte Möglichkeit entschieden, weil die gleichermaßen mit alter wie neuer Unit funktioniert. Wer nur noch die neue Unit benutzen will, ist natürlich mit der "richtigen" Zuweisung besser bedient. Ich bin noch am Testen und benutze erstmal noch die eine, mal die andere Unit-Version.

Mir schwebt vor, weitere Beispielanwendungen zu entwickeln, z.B. Transfer aus DBF-Datenbanken mit Zugriff über die Komponente TDBF. Das soll dann auch gleichermaßen mit alter wie neuer Unit "MYSQL" funktionieren.

Ach, Du bist ja derjenige, der die Unit weiter entwickelt hat, wie ich gerade auf der Suche nach weiteren Beiträgen von Dir feststellte. Da bin ich ja glücklicherweise gleich an die beste Quelle überhaupt geraten, prima !


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 Uhr.
Seite 4 von 4   « Erste     234   

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