AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials MySQL mit Delphi

MySQL mit Delphi

Ein Tutorial von Luckie · begonnen am 23. Okt 2007 · letzter Beitrag vom 1. Aug 2013
Antwort Antwort
Seite 4 von 4   « Erste     234
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
MySQL mit Delphi
MySQL-Datenbanken mit Delphi ohne Fremdkomponenten

Homepage: http://delphitutorials.michael-puff.de
Angehängte Dateien
Dateityp: zip mysql_mit_delphi_demos_155.zip (547,0 KB, 267x aufgerufen)
Dateityp: pdf mysql_mit_delphi_190.pdf (288,4 KB, 523x aufgerufen)
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von Bernhard Geyer
Bernhard Geyer

 
Delphi 10.4 Sydney
 
#31
  Alt 6. Mär 2008, 10:19
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.
  Mit Zitat antworten Zitat
croid

 
Delphi 2005 Personal
 
#32
  Alt 6. Mär 2008, 17:28
Ah, ich habe das Problem gefunden. Wenn ich die Datein für WIN 32 öffne geht es, mit .NET geht es nicht...
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#33
  Alt 10. Jun 2008, 18:32
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
Fabian
  Mit Zitat antworten Zitat
delnu
 
#34
  Alt 27. Jul 2013, 10:10
Hallo !

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 , 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 !
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

 
FreePascal / Lazarus
 
#35
  Alt 27. Jul 2013, 10:38
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
  Mit Zitat antworten Zitat
delnu
 
#36
  Alt 27. Jul 2013, 11:09
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.

Geändert von delnu (27. Jul 2013 um 11:24 Uhr)
  Mit Zitat antworten Zitat
Medium

 
Delphi 2007 Enterprise
 
#37
  Alt 27. Jul 2013, 22:23
Probiere es mal mit 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.

Geändert von Medium (27. Jul 2013 um 22:26 Uhr)
  Mit Zitat antworten Zitat
delnu
 
#38
  Alt 28. Jul 2013, 03:00
Hallo !

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.

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" !

Geändert von delnu (30. Jul 2013 um 08:05 Uhr)
  Mit Zitat antworten Zitat
samso
 
#39
  Alt 31. Jul 2013, 14:19
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);
  Mit Zitat antworten Zitat
delnu
 
#40
  Alt 1. Aug 2013, 00:18
Vielen Dank für die Erläuterungen !

Endlich mal jemand, der sich auskennt.

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 !

Geändert von delnu ( 1. Aug 2013 um 00:34 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial 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 · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 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