0

Fehlermeldungen: unterschiedliche Datentypen

Bis eben bin ich davon ausgegangen, dass

first(select Tabelle)

und

create Tabelle

den gleichen Datentypen, nämlich einen Record zurückliefern. Bei dem nachfolgenden Skript soll geprüft werden, ob ein Personendatensatz mit bestimmten Informationen schon vorhanden ist. Wenn keiner gefunden wird, soll ein Datensatz angelegt werden. Das Skript wirft aber eine Fehlermeldung aus, dass der Datentyp der Variable customer und die Rückgabe des create() nicht gleich wären. 

let customer := first(select Kundendaten where Vorname = item(split(data, ","), 2)
   and Nachname = item(split(data, ","), 3) and (Telefon = item(split(data, ","), 4)
   or 'E-Mail' = item(split(data, ","), 5)));
if customer = null then
 customer := (create Kundendaten);
end;

Jetzt stehe ich völlig auf dem Schlauch und bin für eure Hilfe dankbar.

Grüße, Ralf

4 Antworten

null
    • Horst_Fertig
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Servus !

    Wie wär's denn (sinngemäß, versteht sich) mit einer etwas anderen "Grundkonstruktion" im Sinne von:

    let rstAnzahl := cnt(select Mitglieder where Vorname = "Willi" and Nachname = "Meier");

    if rstAnzahl= null then
     let newRec := create Mitglieder;
        newRec.Vorname := "Willi"
    end;

    Also hier einfach erst einmal mit einer anderen Variable die Anzahl der Datensätze prüfen.

    let Anzahl := cnt(select Kundendaten where Vorname = item(split(data, ","), 2)
       and Nachname = item(split(data, ","), 3) and (Telefon = item(split(data, ","), 4)
       or 'E-Mail' = item(split(data, ","), 5)));

    etc.

    Grüße und HTH

    HF

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Ralf. Der Typvergleich erfolgt gleich nach if und gleich nach then. D.h. Du vergleichst 

    if customer -> type: nid
    then customer := (create Kundendaten) -> type: void, weil kein echter Typ, sondern eine Zuweisung

    Besser wäre:

    let customer := first(select Kundendaten where Vorname = item(split(data, ","), 2)
       and Nachname = item(split(data, ","), 3) and (Telefon = item(split(data, ","), 4)
       or 'E-Mail' = item(split(data, ","), 5)));
    if customer = null then
     create Kundendaten end;
    customer := last(select Kundendaten);

    Mirko

      • Icarus_Ralf_Becker
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Hallo Mirko, deine Variante gefällt mir gut. Ich musste nur eine Kleinigkeit korrigieren. Es muss nämlich lauten:

      if customer = null then
       create Kundendaten;
       customer := last(select Kundendaten)
      end;

      Ansonsten wird der Variable "customer" ja immer der letzte Datensatz zugewiesen, selbst wenn ein Datensatz gefunden wurde.

      Vielen Dank nochmal für den Denkanstoß.

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Wenn man sich unsicher ist um welchen Datentyp es sich handelt, ist die Funktion debugValueInfo() sehr hilfreich.

Content aside

  • vor 1 JahrZuletzt aktiv
  • 4Antworten
  • 57Ansichten
  • 4 Folge bereits