Access Datenbanken

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Dienstag 18. April 2006, 14:17

gerold hat geschrieben:
stigi hat geschrieben:dann aus meiner Tabelle "Regel20" z.B. die alle Werte in der Spalte "Info" ausgeben lassen kann?
Hi stigi!

Code: Alles auswählen

import dbi
import odbc

conn = odbc.odbc('DRIVER=Microsoft Access-Treiber (*.mdb);UID=admin;DBQ=C:\\temp\\T100_V46.mdb')
cur = conn.cursor()
sql = "SELECT Info, IrgendeinFeld FROM Regel20"
cur.execute(sql)
rows = cur.fetchall()
cur.close()
conn.close()

for row in rows:
    # Info = 0, da es als erstes in der SQL-Anweisung auftaucht
    # IrgendeinFeld = 1, da es als zweites in der SQL-Anweisung auftaucht
    print "Info:", row[0]
    print "IrgendeinFeld:", row[1]
mfg
Gerold
:-)
wenn ich das so mach kommt bei mir das hier

Traceback (most recent call last):
File "Y:\Mitarbeiter\muster\pythonwin\spe2.py", line 7, in ?
cur.execute(sql)
dbi.program-error: [Microsoft][ODBC Microsoft Access Driver] 2 Parameter wurden
erwartet, aber es wurden zu wenig Parameter ³bergeben. in EXEC
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Dienstag 18. April 2006, 14:47

Hi
Ich tippe mal darauf das als 2. Parameter die
Verbindungskennung( Connection ID, Resource link identifier, wie mans eben nennen wil :wink: )
erwartet wird...

lg icepacker
ubuntu linux !!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 18. April 2006, 14:56

Hi stigi!

--->>> IrgendeinFeld <<<--- ???

Hast du das durch einen real **existierenden** Feldnamen ausgetauscht?

mfg
Gerold
:-)

PS: Die Fehlermeldungen beim ODBC von pywin32 können täuschen...
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 18. April 2006, 14:59

icepacker hat geschrieben:Hi
Ich tippe mal darauf das als 2. Parameter die
Verbindungskennung( Connection ID, Resource link identifier, wie mans eben nennen wil :wink: )
erwartet wird...
Hi icepacker!

Das passt mit Sicherheit! Da wird nichts mehr benötigt. Die Verbindung wurde bereits geerbt und muss nicht noch einmal übergeben werden. In solchen Fällen muss man unbedingt die übergebene SQL-Anweisung überprüfen, da die Fehlermeldungen vom ODBC (des pywin32) sch... sind.

Code: Alles auswählen

cur.execute(sql)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Dienstag 18. April 2006, 15:19

gerold hat geschrieben: Hi icepacker!

Das passt mit Sicherheit! Da wird nichts mehr benötigt. Die Verbindung wurde bereits geerbt und muss nicht noch einmal übergeben werden. In solchen Fällen muss man unbedingt die übergebene SQL-Anweisung überprüfen, da die Fehlermeldungen vom ODBC (des pywin32) sch... sind.

Code: Alles auswählen

cur.execute(sql)
mfg
Gerold
:-)
Dann kapiere ich aber nicht warum er schon in dieser Zeile 7 meckert :?

Bei deinem angesprochenem Problem sollte er imo erst hier meckern:

Code: Alles auswählen

rows = cur.fetchall()
lg icepacker

edit: Hab nochmal nachgeguckt, dass was ich geschrieben habe scheint doch
nicht zu stimmen. Jetzt bin ich noch verwirrter...
ubuntu linux !!
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Mittwoch 19. April 2006, 07:02

gerold hat geschrieben:Hi stigi!

--->>> IrgendeinFeld <<<--- ???

Hast du das durch einen real **existierenden** Feldnamen ausgetauscht?

mfg
Gerold
:-)

PS: Die Fehlermeldungen beim ODBC von pywin32 können täuschen...
;) so intelligent war ich, das auszutauschen :lol: dabei kommt der beschriebene fehler :(
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Montag 24. April 2006, 12:07

sodele hab alles soweit hinbekommen was ich wollte, jetzt kommt die nächste stufe. ich muss in dieser datenbank bestimmte felder manipulieren. in dem tutorial war jetzt nur beschrieben wie man daten aus der access datenbank ausliest, aber nicht wie man welche reinschreibt.

hat mir da jmd n guten link zu anfängerhilfen oder tutorials? oder könnte mir jemand eben sagen wie ich z.B. in eine accessfile mit dem namen xxx in die tabelle yyy in zeile 5 spalte b irgendetwas hineinschreiben kann?

thx und danke im vorraus
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Montag 24. April 2006, 14:39

hier meine ganze python file bisher:

Code: Alles auswählen

import dbi 
import odbc 

conn = odbc.odbc('DRIVER=Microsoft Access-Treiber (*.mdb);UID=admin;DBQ=C:\\temp\\T100_V46.mdb') 
cur = conn.cursor() 
sql = "SELECT DISTINCT PA_INFO, PA_INFO_TEXTNR, TEX_AUSGABE FROM Regel20, TEXTE WHERE REGEL20.PA_INFO_TEXTNR = TEXTE.TEX_NUMMER and TEXTE.TEX_SPRACHE ='deu' and REGEL20.PA_INFO <> TEXTE.TEX_AUSGABE" #where PA_INFO like '%Runden%'
cur.execute(sql) 
rows = cur.fetchall() 
cur.close() 
conn.close() 


for row in rows: 
    # row[0], fuer das erste Element in der SQL anweisung, row[1] fuer das zweite usw... 
    string1 = row[0]
    string2 = row[2]
    print string1
    print row[1]
    print string2
    print 

ich möchte jetzt, dass das was in string2 drin steht an die quelle von string1 geschrieben wird, also in die access file rein.
kann mir bitte jemand helfen? oder soll ichs lieber in einem sql forum versuchen? :)
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Montag 24. April 2006, 15:01

Hi
Das ganze sollte mit UPDATE und WHERE gehen.
Aber versuch doch mal dich durch das SQL-Tutorial,
das Joghurt schon gepostet hat, durchzuarbeiten :wink:

lg icepacker
ubuntu linux !!
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Dienstag 25. April 2006, 07:09

jetzt wo dus sagst :roll: hatte nich gesehn das es das bei dem tutorial von joghurt auch gibt
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Dienstag 25. April 2006, 07:26

ehmm also wenn ich das richtig verstanden hab müsste das so aussehen

Code: Alles auswählen

UPDATE REGEL20
  SET PA_INFO =string2 #wie mach ich das, damit der inhalt von string2 verwendet wird?
  WHERE string1 <> string2
wie bind ich das jetzt noch in mein python code oben ein?
wär echt nett wenn jmd helfen könnt :D
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. April 2006, 15:46

Mit

Code: Alles auswählen

cur.execute(dein_sql_code)
natürlich.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Donnerstag 27. April 2006, 07:20

damit kann ich nich wirklich was anfangen...
so intelligent war ich auch schon, das zu versuchen nur leider ging das nicht. Es kommt ein Fehler, dass zu wenige Parameter übergeben wurden. Und ausserdem hatte ich gefragt wie ich den Inhalt von der variablen string2 in meiner SQL anweisung benutzen kann.
sorry aber deine Aussage hat mir 0 geholfen...

hier mein code, wär nett wenn jemand hilfreich antworten könnte.

Code: Alles auswählen

import dbi 
import odbc 

conn = odbc.odbc('DRIVER=Microsoft Access-Treiber (*.mdb);UID=admin;DBQ=C:\\temp\\T100_V46.mdb') 
cur = conn.cursor() 
sql = "SELECT DISTINCT PA_INFO, PA_INFO_TEXTNR, TEX_AUSGABE FROM Regel20, TEXTE WHERE REGEL20.PA_INFO_TEXTNR = TEXTE.TEX_NUMMER and TEXTE.TEX_SPRACHE ='deu' and REGEL20.PA_INFO <> TEXTE.TEX_AUSGABE" #where PA_INFO like '%Runden%'
cur.execute(sql) 
rows = cur.fetchall()

for row in rows: 
    # row[0], fuer das erste Element in der SQL anweisung, row[1] fuer das zweite usw... 
    string1 = row[0]
    string2 = row[2]
    print string1
    print row[1]
    print string2
    print 

cur.execute("UPDATE REGEL20 SET PA_INFO =string2 WHERE string1 <> string2")
cur.close() 
conn.close() 
Zuletzt geändert von stigi am Donnerstag 27. April 2006, 09:42, insgesamt 2-mal geändert.
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Donnerstag 27. April 2006, 07:51

Und ausserdem hatte ich gefragt wie ich den Inhalt von der variablen string2 in meiner SQL anweisung benutzen kann.
Wie man in Python Strings zusammensetzt weißt Du? Ansonsten bitte mal ein Anfänger-Tutorial durcharbeiten! Danke!
Außerdem hattest Du gefragt:
wie bind ich das jetzt noch in mein python code oben ein?
Und darauf hat Leonidas Dir einwandfrei geantwortet.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Donnerstag 27. April 2006, 09:32

unglaublich, wo sind wir denn hier? wenn ich in der schule meinen lehrer nach was frag wie etwas funktioniert dann sagt der mir doch auch nicht ich soll das und das lesen, sondern erklärt es mir.

ich weis wie sich strings in python zusammensetzen, das hilft mir aber nicht den string in meiner SQL anweisung zu verwenden! Und wenn die antwort einwandfrei gewesen wäre, dann würde es bei mir funktionieren, oder es wäre wenigstens jemand dazu bereit mir zu sagen was daran falsch ist und mich nicht wieder auf irgendwelche tutorials zu verweisen...ich kann mit solchen antworten nichts anfangen ich hab eben nicht so viel damit zu tun wie manch andere hier, und daher kann auch nicht jeder davon ausgehen, dass man alles sofort versteht wenn man nur n codebrocken hingeworfen bekommt.

und das ist der fehler der dabei entsteht:
Traceback (most recent call last):
File "Y:\......\spe4.py", line 19, in ?
cur.execute("UPDATE REGEL20 SET PA_INFO =string2 WHERE string1 <> string2")
dbi.program-error: [Microsoft][ODBC Microsoft Access Driver] 2 Parameter wurden
erwartet, aber es wurden zu wenig Parameter ³bergeben. in EXEC
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Antworten