Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten aus Sql Db in Paradox Db Speichern (https://www.delphipraxis.net/65846-daten-aus-sql-db-paradox-db-speichern.html)

Jürgen99 21. Mär 2006 12:33

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:
type
  TPostEntry = record
    ort : string[30];
    nummer: String[30];
   end;
Das eigentliche Programm ->

Delphi-Quellcode:
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;
Desweiteren wird der Inhalt der spalte Ort nicht richtig an die paradox db übertragen.
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????

marabu 21. Mär 2006 13:00

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:
INSERT INTO PDX_TABLE SELECT * FROM ":ODBC:MYSQL_TABLE
Freundliche Grüße vom marabu

Jürgen99 21. Mär 2006 16:18

Re: Daten aus Sql Db in Paradox Db Speichern
 
Zitat:

Zitat von marabu
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:
INSERT INTO PDX_TABLE SELECT * FROM ":ODBC:MYSQL_TABLE
Freundliche Grüße vom marabu

Erstmal ein fettes Dankeschön für die schnell antwort , hab mir den treiber gezogen und installiert und meine query damit verbunden.
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?

Jürgen99 21. Mär 2006 17:24

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..?

marabu 22. Mär 2006 10:27

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:
insert into adresse(nr) select nr from ":dpdemo:auftrag
Sieht schwierig aus, ist es aber nicht.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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