[gelöst] ADOrs, FIND auf mySQL DB

31. Januar 2009 15:10

Hallo zusammen,

habe bereits erfolgreich eine Verbindung von unserer NativeDB zu unserer mySQLDB auf dem Webspace hergestellt. Möchte direkt aus NAV5 heraus die Artikeldatenbank aktualisieren.
Also einfach mal Online eine neue Tabelle angelegt, in NAV5 per Automation ADO 2.7 genommen und folgenden Ablauf gesetzt:

Code:

CLEAR(Startzeit);
CLEAR(Endzeit);
CLEAR(ADOConn);
CLEAR(ADOrs);

Startzeit := TIME;
OpenMethod := 1; // 1=adOpenKeyset; 2=adOpenDynamic; 3= adOpenStatic
LockMethod := 3; // 1=dLockreadonly; 2=adLockPessimistic; 3=adLockOptimistic; 4=adLockBatchOptimistic

CREATE(ADOConn);
ADOConn.ConnectionString('DRIVER={MySQL ODBC 3.51 Driver};SERVER=databaseaufserver;DATABASE=db;' +
  'UID=user;PWD=kennwort;OPTION=1 + 2 + 8 + 32 + 2048 + 163841');
ADOConn.Open;

CREATE(ADOrs);
ADOrs.Open('SELECT * FROM test',ADOConn,OpenMethod,LockMethod);

item.INIT;
item.RESET;
item.SETRANGE("Web-Shop",TRUE);
REPEAT
  WITH ADOrs DO BEGIN
   MoveFirst;
[color=#FF0000]   IF Find('artikelnr = ' + item."No.") = True THEN[/color]
   Fields.Item('artikelnr').Value := item."No.";
   Fields.Item('suchbegriff').Value := item."Search Description";
   Fields.Item('bezeichnung').Value := item.Description;
   Fields.Item('bezeichnung2').Value := item."Description 2";
   Fields.Item('basiseinheitencode').Value := item."Base Unit of Measure";
   Fields.Item('vkpreis').Value := item."Unit Price";
   Fields.Item('istaktionsartikel').Value := item.Aktionsartikel;
   Fields.Item('Highlightzeitraum').Value := item.Highlightzeitraum;
   Fields.Item('lagermodell').Value := item.Lagermodell;
   Fields.Item('Auslaufartikel').Value := item.Auslaufartikel;
   Fields.Item('Sonderartikel').Value := item.Sonderartikel;
   Fields.Item('gesperrt').Value := item.Blocked;
   Fields.Item('eannummer').Value := item."EAN-Nummer";
   Fields.Item('warengruppe').Value := item."Warengruppe WebShop";
   Fields.Item('warengruppeAGIS').Value := item.Warengruppe;
   Fields.Item('mindestabnahme').Value := item.Mindestabnahmemenge;
   Update;
  END;
UNTIL item.NEXT = 0;
Endzeit := TIME;

MESSAGE('Startzeit: %1 - Endzeit: %2',Startzeit,Endzeit);



Das ganze funktioniert auch soweit, nur was ist, wenn ein Datensatz bereits vorhanden ist. Deswegen vorher die Abfrage, ob dieser vorhanden ist, nämlich mit der üblichen Funktion von ADOrs.FIND('artikelnr Like ' + Item."No." + ''');

Hier bekomme ich jetzt aber eine Meldung, mit der ich so recht nichts anfangen kann ... Eine Typenkonvertierung kann nicht durchgeführt werden VOID = Text ...

Irgendwas stimmt da mit der Funktion FIND aus der ADO ActiveX nicht. Hat schonmal jemand hiermit gearbeitet und weiss vielleicht Rat?

Vielen Dank.
Zuletzt geändert von laha2108 am 3. Februar 2009 13:29, insgesamt 1-mal geändert.

Re: ADOrs, FIND auf mySQL DB

31. Januar 2009 18:19

Versuch doch einfach mal eine gezielte Abfrage:
Code:
ADOrs.open(STRSUBSTNO('SELECT * FROM test WHERE artikelnr = %1', Item."No."), ADOconn, ...);
IF NOT ADOrs.EOF THEN BEGIN
  //* update values
END ELSE BEGIN
  //* insert new record
END;

[gelöst] ADOrs, FIND auf mySQL DB

3. Februar 2009 13:28

So, nachdem ich das ganze umgesetzt hatte und mir der komplette NAV5-Client genau an der Stelle SELECT weggeschmiert war :shock: und ich nach einiger Testerei herausgefunden habe, dass es irgendwie mit der mySQL 3.5x zusammen hängt :evil: , habe ich jetzt auf mySQL 5.1 migriert und ... es funktioniert. :mrgreen:

Danke für den Hinweis.