mysql spalten auslesen ! row[i]



  • es sieht mir so aus,
    als wenn alle die mit der mysql.h arbeiten
    die spalten per row[i] auslesen...

    mich stört dadran,
    das sich bei einer veränderung der abfrage oder der tabellenstruktur
    die feldreihenfolge ändern könnte,
    und ich dann im ganzen code indexe für row ändern muß.

    von vb und von perl bin ich gewohnt,
    das ich die spalten in der row auch über den namen ansprechen kann
    vb: row!spaltenname
    perl: row->{spaltenname}
    dadurch erscheint mir der code etwas "wartbarer"

    arbeitet da jemand mit vergleichbaren möglichkeiten in vc?

    haksi

    PS:
    ich meine jetzt nicht sowas langsames wie
    suche über alle field.name bis textvergleich name=gesuchte spalte
    ...da gibts sicher was schickes...



  • wenn du die abfrage ordentlich machst, dann ändert sich doch nichts an dem index?

    select name, vorname from kunde

    wenn nun ein neues feld hinzukommt z.B. "telefon" dann geht die Abfrage doch immer noch? Und auch der Zugriff, oder?



  • Klar mache ich es mit Namen. Man schreibt sich einfach eine Wrapperklasse welche dies bereitstellt.

    Die Funktionen aus der mysql.h (mysql-api) ist ein API. Was du daraus dann machst bleibt ja dir überlassen.
    Du kannst dir ja den Feldnamen auch auslesen. Dann erstelltst du eben eine Variable, Array, Liste oder was auch immer mit dem Namen und dem Wert.



  • hallo tom,

    hmm...wrapper-klasse?
    ich glaube da brauch ich ein bischen hilfe,
    kannst du mir ein stückchen code zeigen?

    ich komm zZ nur auf so ideen wie
    #define adrId 0
    #define adrVorname 1
    #define adrNachname 2
    #define adrTelefon 3
    CString sql="SELECT id,vorname,nachname,telefon FROM irgendwas";
    und könnte zB. mit row[adrNachname] abfragen

    aber erstens hätte ich gerne ,
    das mir die nummerierung abgenommen wird und zweitens hätte ich gerne die feldnamen nur einmal aufgezählt.

    danke
    hagen



  • bevor du sowas machst solltest du programmieren lernen.
    ohne dem wird es nicht funktionieren.
    wenn ich schon anfangen muss dir zu sagen was eine wrapperklasse ist dann ist es besser du verwendest access.

    du kannst aber auch auf vorhanden wrapper zugreifen.
    oder du verwendest NETFRAMEWORK 2



  • hallo tom,

    ich werd das gefühl nicht los,
    das deine antwort beleidigend sein soll.
    ich kann schon verstehen,
    das du als der grosse oberguru dieser rubrik vor lauter newbie fragen auch gelegentlich die geduld verlierst,
    also werde ich mich bemühen,
    sie zu behalten,
    denn ich bin ja der bittsteller,
    ich habe die fragen.

    bitte nimm zur kenntnis,
    das sich meine frage auf das programmierdesign bezieht,
    ich will wartbaren code,
    ich will keine doppelte benennungen,
    ich rede von pflege

    ich bin so selbstbewußt,
    zu behaupten,
    das ich was vom programmieren verstehe,
    vielleicht sollte ich auch programmieren lernen,
    durchaus,
    ich muß noch ziemlich viel lernen.
    besonders in c

    ich verdiene mir meine brötchen seit ca.10 jahren ausschliesslich mit programmieren und vielleicht 4 davon hätten ohne mysql nicht funktioniert
    da ist leider kein c dabei,
    das mache ich nur aus spass an der freude,
    und weil ich hoffe dadurch ein besserer mensch zu werden
    wie gesagt vb und perl,
    und wie du vielleicht weißt,
    schreiben beide oo-programmierung nicht besonders groß
    trotzdem weiß ich was eine klasse ist,
    und ich weiß auch nutzbringende dinge darin zu kapseln,
    besser als in einer wilden ansammlung an subs
    ich kann also deinen ersten rat mit der wrapper-klasse sehr wohl für mich mit
    "bastele dir eine black box, die alles für dich macht" übersetzen

    da ich nicht glaube,
    das du mir raten wolltest,
    für jede abfrage eine klasse zu schreiben,
    stehe ich doch am ende wieder vor dem problem,
    wie mache ich aus der liste der abgefragten parameter wieder die indexe in den recordsets,
    (ohne textvergleich, bis ich den passenden finde)

    was ich brauche,
    hat eher was mit c ohne ++ und oo zu tun,
    vielleicht sogar noch einfacher mit präprozessor, makros, templates
    von denen ich leider garnichts verstehe
    (übrigens verwende ich vc++6.0)

    also noch mal die frage,
    schickst du mir ein stückchen code,
    wie du das machst?

    oder jemand anders,
    der nicht mit festen indexen arbeitet?

    hm



  • Hab dein zweites Gedicht nicht ganz gelsen, aber willst du jetzt c oder c++? CString sieht ja nach ner Klasse aus also C++.

    haksi schrieb:

    CString sql="SELECT id,vorname,nachname,telefon FROM irgendwas";
    und könnte zB. mit row[adrNachname] abfragen

    Was ist dein Problem? Du baust doch den SQL String zusammen mit den Spaltennamen, dann weißt du doch wo welche Spalte steht.


Anmelden zum Antworten