EzMySql Daten lesen und Updaten

  • Hi Forum.

    Irgendwie stehe ich gerade auf dem Schlauch.
    Bekomme mit der EzMySql-Lib schön die Datenbank upgedatet und eingefügt, leider verstehe ich jetzt leider aber nicht wie ich daten auslese und je nach dem was enthalten ist weiter vorgehe.
    Gemeint ist folgendes:
    Ich möchte schauen ob es eine Nummer in einer Datenbank-Spalte schon gibt, wenn ja, soll nichts unternommen werden - wenn nein, eine neue Reihe einfügen.
    Habe eben gerade noch gemerkt das es etliche verschiedene Dialekte für SQL-Datenbanken gibt.
    Also hatte ich z.B. mit
    _EzMySql_Exec("IF NOT EXISTS ( Filmarchiv WHERE Schauspieler='Wesley') THEN (...

    Aber MySQL (Welches hier genutzt wird) kennt scheinbar kein EXIST :(
    Also, Idee wieder verworfen...


    Dachte also evtl. gibt ja die Funktion _EzMySql_Exec bei einem UPDATE zurück ob der Eintrag gefunden wurde.
    Leider gibt diese aber immer eine "1" zurück, da ich ja nicht an den Rückgabewert von UPDATE, sondern nur von _EzMySql selbst komme - also auch verworfen.


    Dann wollte ich mit SELECT schauen ob die Nummer existiert, aber ich finde einfach nicht raus wie ich nun an den Rückgabewert komme.
    Ein SELECT-Befehl direkt in der Lib habe ich nicht entdecken können  ?( menno

    Kann mich bitte mal jemand aufklären wie ich das nun am besten anstelle :wacko:
    Wäre sehr dankbar dafür.

    Grüße derweil
    Björn

    Einmal editiert, zuletzt von Tueftler (22. August 2012 um 17:30)

  • Da ich für PHP-Abfragen keine UDF verwende und die von dir genannte nicht besitze, kann ich leider nicht testen,
    ob mein Vorschlag funktioniert. Allerdings habe ich folgendes Codeschnipsel auf der UDF-Seite bemerkt, mit dem es doch eigentlich machbar sein sollte:

    PHP
    $sMySqlStatement = "CREATE TABLE IF NOT EXISTS TestTable (" & _
                       "RowID INT NOT NULL AUTO_INCREMENT," & _
                       "Name TEXT NOT NULL ," & _
                       "Age INT NOT NULL ," & _
                       "EyeColour TEXT NOT NULL ," & _
                       "HairColour TEXT NOT NULL ," & _
                       "PRIMARY KEY (`RowID`) ," & _
                       "UNIQUE INDEX RowID_UNIQUE (`RowID` ASC) );"


    Du musst laut diesem Code also nicht mit "IF (Bedingung) THEN (Aktion)", sondern "(Aktion) IF (Bedingung)" arbeiten.
    Genaueres kann ich dir aber leider auch nicht sagen.
    Ansonsten verwende einfach eine andere UDF oder machs selbst ohne UDF.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Bei SQL musst du nicht unbedingt prüfen, ob etwas schon existiert. Es gibt zum einen den eindeutigen Primärschlüssel. Dieses Feld identifiziert den Eintrag eindeutig und das Einfügen neuer Einträge mit dem selben Schlüssel schlägt fehl. Falls du mehrere einzigartige Felder hast, kannst du für die anderen UNIQE-Indizes anlegen, die das gleiche bewirken.

  • Ich merke schon, ich kenne mich zu wenig mit SQL aus...
    Uniqe habe ich gefunden, leider kann ich die Spalte nicht darauf umstellen da sie als Typ "Text" definiert wurde und das scheinbar seine Bedeutung hatte...
    Habe sie testweise mal auf Int gestellt da ich ja Nummern suche, leider funktioniert dann alles andere nicht mehr da bei leeren Reihen dann immer Nullen drin stehen und nicht nichts.

    Die If-Bedingung umzustrukturieren hat nicht hin gehauen.
    Habe es dann noch mit Progandy's UDF probiert bzw. bin noch dabei.
    Wie würde man denn damit in einer Db und einer Spalte was suchen?
    Bin grade noch schwer am stöbern.

    Ich glaube es war nicht die weiseste Entscheidung die abgespeckte UDF zu nutzen, naja.

    Björn

  • Kann mir bitte noch hier jemand sagen wie das zu machen ist?
    Sorry, aber irgendwie will das nicht so wie ich...

    Möchte ja nur eine Spalte der Db durchsuchen und wenn kein Fund, INSERT.
    Klingt doch recht easy aber ich weiß nicht wo ich es anpacken soll.

    Am liebsten mit der Lib "_EzMySql_Exec" da damit mein Projekt derzeit arbeitet.
    Ein Test mit der MySQL u3 von Progandy hat aber eigentlich auch funktioniert.


    Björn

  • Lege einen UNIQE index über die Spalte und verwende dann einfach INSERT. Anschließend kannst du anhand des Fehlercodes (_EzMySql_ErrMsg) herausfinden, ob der Eintrag schon da war oder neu ist. Ansonsten kannst du versuchen mit einer SELECT abfrage und _FetchTabele2D den Eintrag zu finden und ansonsten ein INSERT starten.

  • Uniqe habe ich gefunden, leider kann ich die Spalte nicht darauf umstellen da sie als Typ "Text" definiert wurde und das scheinbar seine Bedeutung hatte...
    Habe sie testweise mal auf Int gestellt da ich ja Nummern suche, leider funktioniert dann alles andere nicht mehr da bei leeren Reihen dann immer Nullen drin stehen und nicht nichts.

    UNIQE wäre mir auch am liebsten, jedoch kann ich das nicht machen...

    Ich versuche morgen früh dann mal die Sache mit der Select-Abfrage und _FetchTabele2D.

    Grüße!

  • Juhu, jetzt klappts.
    Habe es hin bekommen - was eine Geburt :evil:

    Falls nochmal jemand daran sitzt:

    Code
    Local $SQLdata
    $SQLdata = _EzMySql_GetTable2d("SELECT * FROM Filmarchiv WHERE Schauspieler = 'Wesley';")
    
    
    if UBound($SQLdata ,1) > 1 Then	
    MsgBox(0,"","gefunden")
    Else	 	
    MsgBox(0,"","nicht gefunden")
    EndIf

    Danke Euch für die Tips!
    Björn