![]() |
Datenbank: Mysql / Paradox 7 • Zugriff über: mysq.pas und tquery
Daten aus Sql Db in Paradox Db Speichern
Hallo ihr delphianer,
habe hier ein kleines Problem, ich will aus meiner mysql datenbank.tabelle datensätze auslesen und diese an eine paradox db.tabelle anhängen. Benutze zum auslesen der mysql db mysql.pas routinen, die datensätze werden per schleife in einem array gespeichert und per query in die paradox tabelle übertragen. Soweit so gut er trägt die ersten zwei datensätze in die tabelle ein danach kommt aber ein error : "Project raised exception class EAccess Violation with message Access violationat Adress 00402E27 in module project.exe. Read of adress6973A9BA." Hier gleich noch der Code dazu: Der Record ->
Delphi-Quellcode:
Das eigentliche Programm ->
type
TPostEntry = record ort : string[30]; nummer: String[30]; end;
Delphi-Quellcode:
Desweiteren wird der Inhalt der spalte Ort nicht richtig an die paradox db übertragen.
procedure TForm1.Button9Click(Sender: TObject);
var _myCon: PMySQL; host, user, pass, db: PChar; query : PChar; _myRes: PMySQL_Res; _myRow: PMySQL_Row ; Posts : Array of TPostEntry; x : pchar ; i: integer; begin // Login sql db host := 'XXXX'; user := 'XXX'; pass := nil; db := 'XXX'; _myCon := mysql_init(nil); if _myCon = nil then begin ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren'); Exit; end; //Verbindung herstellen if mysql_real_connect(_myCon, host, user, pass, db, 3306, nil, 0) = nil then begin ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(_myCon)); Exit; end; ShowMessage('Verbindung hergestellt'); query := 'SELECT nummer,ort FROM adresse'; mysql_real_query(_myCon, query, Length(query)); _myRes := mysql_store_result(_myCon); //alle Datensätze vom Server anfordern if _myRes = nil then begin ShowMessage('Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon)); Exit; end; SetLength(Posts, mysql_num_rows(_myRes)); //Posts-Array-Größe auf Anzahl der Datensätze setzen for i := 0 to High(Posts) do begin _myRow := mysql_fetch_row(_myRes); //Datensatz abholen posts[i].nummer := _myRow[0]; posts[i].ort := _myRow[6]; // ShowMessage(Nummer: ' + posts[i].nummer+''); x:= 'select * from tadresse'; query30.close; Query30.Sql.Text := x; Query30.Open; // Datensatz einfügen Query30.append; Query30['nummer'] := posts[i].nummer; Query30['ort'] := posts[i].ort; Query30.Post; end; Sql-DbSpalte (Ort) = Text(30) Paradox-DbSpalte (Ort) = A(30) Bin ja der meinung das mein record net funzt, aber weis langsam nicht mehr weiter :wall: Hat einer von euch ne IDEE???? |
Re: Daten aus Sql Db in Paradox Db Speichern
Herzlich willkommen in der Delphi-PRAXiS, Jürgen.
Wenn du ohnehin die BDE einsetzt, dann könntest du diese für den Zugriff auf beide Datenquellen verwenden. Du müsstest lediglich einen ODBC-Treiber für MySQL installieren. Die Übernahme von Tabellendaten ist dann mit einem einzigen SQL-Statement zu machen:
SQL-Code:
Freundliche Grüße vom marabu
INSERT INTO PDX_TABLE SELECT * FROM ":ODBC:MYSQL_TABLE
|
Re: Daten aus Sql Db in Paradox Db Speichern
Zitat:
Nur wie kann ich die Benutzerdatenquelle(MysqlPar) die ich in mein bde admin. eingetragen habe auch auf anderen rechnern verwenden, wo das programm mit bde installiert wird ohne andauernd die einstellung manuell in bde vornehmen zumüssen. Ist die Benutzerdatenquelle(MysqlPar) in einer datei gespeichert die ich einfach kopieren kann? |
Re: Daten aus Sql Db in Paradox Db Speichern
Also so richtig funktioniert es doch nicht....
Ich verbinde meine query komponete mit meiner paradox.database und mein query.sql string lautet dann
SQL-Code:
.
insert into adresse(nr) select nr from mysqlpar.auftrag
Irgendwas haut da net hin..? |
Re: Daten aus Sql Db in Paradox Db Speichern
Hallo Jürgen,
die Tücke liegt im Detail, aber wenn man die Hinweise aus der Online-Hilfe alle befolgt, dann funktioniert es. Nach dem Einrichten einer ODBC-Datenquelle ist diese zwar im BDE-Admin sofort zu sehen, aber damit sie in deinem Programm verwendet werden kann, musst du erst noch einen ODBC-Treiber konfigurieren. Dazu geht man auf der Seite Konfiguration im BDE-Admin in die ODBC-Liste und erstellt dort über das Kontextmenü einen neuen Treibereintrag. Als Treibername vergibst du MYSQL_DEMO, wählst den korrekten ODBC-Treibernamen aus und trägst in das letzte Feld den Namen der ODBC-Datenquelle ein, die du vorher eingerichtet hast. Auf der Seite "Datenbanken" richtest du dann noch einen Alias DPDEMO mit dem Treiber MYSQL_DEMO ein. Nachdem du alle Änderungen gespeicherst hast, kannst du per SQL folgendes machen:
SQL-Code:
Sieht schwierig aus, ist es aber nicht.
insert into adresse(nr) select nr from ":dpdemo:auftrag
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz