SQL Probleme


  • Jep... für mich sieht's zudem so aus, als schreibst Du bei Möglichkeit 1 genau das (nämlich " & TEXT_NR & ") in die DB... (kenn's halt nur von PHP her *g*)


    In so fern... öhm... die " braucht man? *wunder* Was für 'ne Sprache is das eigentlich...? Oder bezieht sich das direkt auf Statements in der DB?

  • nene mit den " deute ich an das das SQL statement aufhört darauf folgt die variable und dann wieder ein " das und dient hier wieder nur als Zeichenverknüpfungsoperator *grins* und die hochkommas... naja eigentlich weisst man damit darauf hin das der folgende satz ein string ist.. aber irgendwie..... moment ich teste das jetzt verdammt das kann doch nciht sein

  • Ah, verstehe... das sähe dann in PHP so aus:


    Code
    1. $query="select * from xyz where textnr='".$TEXT_NR."'";


    Oder? :)


    bzw. in Deinem Fall:

    Code
    1. $query="insert into xyz values '".$TEXT_NR."'.'".$blah."'";


    Hmm... in dem Fall sollten die Hochkommata aber korrekt sein... denn die Abfrage setzt sich ja zusammen aus "<string>" + <variableninhalt> + "<string>"... und der Variableninhalt soll auch als String in der DB stehen, dafür die '... Hmmm...


    Ganz sicher, daß TEXT_NR zumindest in der DB kein INT-Feld ist? Wenn ohnehin nur Zahlen drinstehen... :)
    Wesentlich mehr fällt mir dazu auch net ein... bestenfalls noch ein Fehler in der Zusammenstellung der Query, aber ich denk' mir mal, dass Du das bis zum erbrechen durchgeprüft hast.. *g*

  • Jepp hab ich *g*


    ich nehme auch an das es daran liegt das mindestens ein feld kein string feld ist und nen würger bekommt. Anders kann ich mirs nicht vorstellen.


    Aber meine BEtreuer tante war immernoch nicht da *grml*


    Ich hab mit nem kollegen schon mal ein anderes Problem gelöst *grins*


    Oh man. Und zu dem Statement was du geschrieben hast, jo genau so siehts aus.

  • Was für 'ne DB läuft denn?
    MySQL? Oracle? Sonstwas?


    Zumindest für Oracle könnte ein describe <tabellenname> weiterhelfen :)
    Die DB wird sich ja wohl zwingen lassen, Dir zu sagen, was da für Felder in der Tabelle stecken.. *ggg*

  • Solltest Du aber mal in Verlegenheit kommen, mit Oracle zu arbeiten (arbeiten zu müssen *g*) sag Bescheid - da hab' ich dann zwangweise berufliche Erfahrung mit, sogar im Dualbetrieb (also Redundante DBs) ;)
    Es wundert mich, dass da nicht ein Studium erforderlich ist... allein wenn man sich die Handbücher so anschaut... :huh :flucht

  • Kleines Azubi needs mal wieder hilfe ;)


    Hab den Fehler gefunden als ich heute auf dem Host nach geschaut habe also der Fehler liegt einfach das ein Wert den ich übergeben habe nicht passte. Habe ein feld das heisst "ERST_TIMESTAMP" als string deklariert und da was reingeschrieben das WMF nicht erkannt hat.


    Nun wurde mir gesagt ich solle in meinem SQL einfach einen String an der Stelle übergeben, der einfach lautet "Current Timestam" Vb könne mit dem Befehl nichts anfangen, QMF ( der übersetzer schon. ) Timestamp ist einfach ein Feld das den erstellungs tag/UHRZEIT/JAHR etc. ausgibt.


    aufbau: JJJJ-MM-TT-00.00.00.000000


    mein Statement:


    gstrSQL = "INSERT INTO aa7.vaatext(TEXT_TYP, TEXT_NR, TEXT_NR_POS, TEXT_FELD, ERST_TIMESTAMP, LCID, PROGNAME) "
    gstrSQL = gstrSQL & "VALUES('" & TEXT_TYP & "', '" & TEXT_NR & "', '" & TEXT_NR_POS & "', '" & TEXT_FELD & "', "
    gstrSQL = gstrSQL & "Current Timestamp, '" & LCID & "', '" & PROGNAME & "'); "



    Mein timestamp funktioniert nicht... kann mir einer sagen wie ich das nun da rein klatschen muss?


    google hilft auch nicht weiter *g*

  • Code
    1. gstrSQL = gstrSQL & "Current Timestamp, '" & LCID & "', '" & PROGNAME & "'); "


    Pauschal würd' ich meinen, es müsste dann:


    gstrSQL = gstrSQL & Current Timestamp & ", '" & LCID & "', '" & PROGNAME & "'); "


    heissen... so dass der Timestamp als Timestamp übergeben wird...
    Ansonsten würd' ich den Timestamp vorher einer Variable zuweisen, möglicherweise geht's net anders (obwohl mich das wundern würde...)
    Nach der art: $stamp = mktime(now); - so steht der Timestamp definitiv als String drinne...


    Hach, was ist "vermuten" schön.. - als ob ich das net täglich machen würde :D

  • das wäre ein ansatz, doch leider brauch ich an der stelle wo der timestamp gebraucht wird den timestamp *g* also im Statement selber...


    ich schau jetzt mal nach was der mir beim lesen der timestamp für nen wert wieder gibt und versuche den wert so zu bosseln, das ess passt... mein gott das kann doch nciht wahr sein... nicht mal die kollegen hier in meiner abteilung können helfen.. (drecks cobol progger *grins* )


    und dann hab ich noch en gespräch mim ausbildungsleiter heute *grml*

  • Naja, versuch's mal mit den Anführungszeichen hinter statt vor "Current Timestamp"...
    Ansonsten wird ja der String "Current Timestamp, '" übergeben... Und dat haut ja nich hin ;)


    Hinterher muss ja rauskommen:


    VALUES('TEXT_TYP', 'TEXT_NR', 'TEXT_NR_POS', 'TEXT_FELD', <wert>Current Timestamp, 'LCID', 'PROGNAME');


  • hö? war der da nicht? ;)


    Dachte der Thread wäre extra dafür ;) trotzdem danke.


    @ elarion... jo ist einfach nur ein string, dann muss ich den bestimmt noch in der anweisung convertieren


    Format soll sein JJJJ-MM-TT-00.00.00.000000


    ich versuch mal das an der stelle so zu machen: gstrsql & "TO_CHAR(current_timestamp, DD-MM-YYYY hh24:mi:ss), "

    tja den rest da hinten weiss ich nicht was es ist :)

    Liste der Typen:
    adArray : 8192
    adBigInt : 20
    adBinary : 128
    adBoolean :
    adBSTR : 8
    adChapter : 136
    adChar : 129
    adCurrency : 6
    adDate : 7
    adDBDate : 133
    adDBTime : 134
    adDBTimeStamp : 135
    adDecimal : 14
    adDouble : 5
    adEmpty : 0
    adError : 10
    adFileTime : 64
    adGUID : 72
    adIDispatch : 9
    adInteger : 3
    adIUnknown : 13
    adLongVarBinary : 205
    adLongVarChar : 201
    adLongVarWChar : 203
    adNumeric : 131
    adPropVariant : 138
    adSingle : 4
    adSmallInt : 2
    adTinyInt : 16
    adUnsignedBigInt : 21
    adUnsignedInt : 19
    adUnsignedSmallInt : 18
    adUnsignedTinyInt : 17
    adUserDefined : 132
    adVarBinary : 204
    adVarChar : 200
    adVariant : 12
    adVarNumeric : 139
    adVarWChar : 202
    adWChar : 130


    ich tipp mal auf adChar : 129 aber keine ahnung was die letzten 6 stellen sind *grml*

  • VarChar klingt mit wahrscheinlicher :)


    Die Gänsefüssen würd' ich dennoch dahinter setzen :D


    Wird der generierte String als solches (also die gesamte Query) später noch weiterverwurstelt?


    Denn der String kommt dann als


    ...VALUES('<........>', TO_CHAR(current_timestamp, DD-MM-YYYY hh24:mi:ss), '<........');


    aus der Anweisung raus. Wird er nicht weiterverarbeitet sondern an die DB gesendet muss es aber gstrsql & TO_CHAR...() & ", '.....');" heissen, da Du ja eigentlich den Wert von TO_CHAR da drinne stehen haben willst und net das Konstrukt ;)

  • gstrSQL = "INSERT INTO aa7.vaatext(TEXT_TYP, TEXT_NR, TEXT_NR_POS, TEXT_FELD, ERST_TIMESTAMP, LCID, PROGNAME) "
    gstrSQL = gstrSQL & "VALUES('" & TEXT_TYP & "', '" & TEXT_NR & "', '" & TEXT_NR_POS & "', '" & TEXT_FELD & "', "
    gstrSQL = gstrSQL & Current_Timestamp & ", '" & LCID & "', '" & PROGNAME & "'); "


    Entweder so... oder aber:


    gstrSQL = "INSERT INTO aa7.vaatext(TEXT_TYP, TEXT_NR, TEXT_NR_POS, TEXT_FELD, ERST_TIMESTAMP, LCID, PROGNAME) "
    gstrSQL = gstrSQL & "VALUES('" & TEXT_TYP & "', '" & TEXT_NR & "', '" & TEXT_NR_POS & "', '" & TEXT_FELD & "', "
    gstrSQL = gstrSQL & "'" & Current_Timestamp & "', '" & LCID & "', '" & PROGNAME & "'); "


    Eine der beiden Möglichkeiten sollte mit Sicherheit funktionieren :)
    Wobei "Sollte" ein ziemlich dehnbarer Begriff ist.... :engel


    Ich übersetz mir das mal grad' *g*:


    $gstrSQL = "INSERT INTO aa7.vaatext(TEXT_TYP, TEXT_NR, TEXT_NR_POS, TEXT_FELD, ERST_TIMESTAMP, LCID, PROGNAME) ";
    $gstrSQL .= "VALUES('".$TEXT_TYP."', '".$TEXT_NR."', '".$TEXT_NR_POS."', '".$TEXT_FELD."', ";
    $gstrSQL .= "'".mktime(now)."', '".$LCID."', '".$PROGNAME."'";


    Hm... also die zweite Variante sieht mir korrekt aus - die Hochkommas übergeben dann den Wert des Timestamp als String in die DB...