PDA

Vollständige Version anzeigen : mit Recordset auf SQL-Server


DarthPatrick
17.02.2003, 14:37
Mal wieder ein kleines Problem von mir ...

Ich habe einzelnen Tabellen meiner DB auf einen SQL-Server 2000 per ODBC. In die Tabelle kann ich schreiben und die Datensätze auch wieder löschen. Wenn ich jetzt per Recodset Daten in die Tabelle schreibe, werden die zwar angezeigt, aber ich kann die Datensätze nicht wieder löschen (nur mit Löschabfrage). Außderdem werden die Daten nicht in den Formularen angezeigt.

Das Skript beginnt wie folgt:

Dim db As Database, rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("tblName", dbOpenDynaset)

Wo liegt wohl der Fehler ?!

Arne Dieckmann
17.02.2003, 14:44
Keine Ahnung, was da schief läuft - dazu ist Deine Anfrage etwas zu ungenau. Werden irgendwelche Schlüssel/Beziehungen beim Insert über Recordset verletzt? Ist im Formular ein Filter gesetzt?

DarthPatrick
17.02.2003, 14:49
Hallo Arne,

Primärschlüssel wird nicht verletzt und in einem stinknormalen Formular werden die Datensätze nicht angezeigt - nur in der Datenblattansicht der Tabelle. Und dort kann ich sie nicht löschen.

Auch per Rechordset und Findfirst kann nicht löschen. Ich erhalte die Fehlermeldung, das bereits ein anderer Benutzer auf die Daten zugreift ...

Aber deiner Antwort entnehme ich, das es grds. möglich ist mit einem Recordset auf eine verknüpfte Tabelle zuzugreifen ?!

DarthPatrick
17.02.2003, 15:40
Nochmal Hallo,
hat denn wirklich keiner ne Idee, woran es liegen kann ??? Ich bekomme ständig diesen Zugrifffehler beim löschen der Daten ...
hier nochmal der komplette Code:
Dim db As Database, rst As Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("tblName", dbOpenDynaset)
rst.AddNew
rst!vorgangs_id = "4711"
rst.Update
rst.Close
db.Close
Set db = Nothing

Arne Dieckmann
17.02.2003, 15:50
Ich sehe jetzt zwar nicht, ob oder wo Du was löschst.
Wenn die ID eine Zahl ist, solltest Du auch eine verwenden:


rst!vorgangs_id = 4711


statt


rst!vorgangs_id = "4711"

DarthPatrick
17.02.2003, 15:55
ohoh, peinlich, peinlich ... aber es geht trotzdem nicht!! Ursprünglich sollten die Daten sofort in einem Listenfeld angezeigt werden. Da das aber nicht passiert (auch keine Fehlermeldung) habe ich in die Tabelle gesehen. Dort steht der Datensatz dann drinn, aber ich kann ihn selbst per Hand im Tabellendatenblatt nicht löschen - nur per Löschabfrage ...

Außerdem wird der Datensatz nicht im Listenfeld angezeigt.

Aber Danke für die Unterstützung! Vielleicht kommen wir der Sache ja doch noch auf die Spur

Arne Dieckmann
17.02.2003, 15:57
Vielleicht hilft ein Requery auf das Listenfeld, nachdem Du den Datensatz hinzugefügt hast?


Dim db As Database, rst As Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("tblName", dbOpenDynaset)
rst.AddNew
rst!vorgangs_id = "4711"
rst.Update
rst.Close
db.Close
Set db = Nothing
Me!MeinListenFeld.Requery

DarthPatrick
17.02.2003, 15:59
ja, habe ich auch gemacht ... ich habe nur den entsprechenden Code mit dem Recordset aus dem Formular kopiert, weil ich denke es liegt am Recordsetzugriff. Bevor ich die Tabelle auf den SQL-Server gepackt habe hat alles wunderbar funktioniert ...

Arne Dieckmann
17.02.2003, 16:03
Also der Datensatz ist in der Tabelle vorhanden, wird aber nicht im Listenfeld angezeigt? Hast Du Dir mal die Datenherkunft des Listenfeldes mal genauer angesehen? Basiert es vielleicht auf einer Abfrage, in der Duplikate ausgeblendet werden ("SELECT DISTINCT...") und ist der neu hinzugefügte Datensatz zufällig ein Duplikat ...?

DarthPatrick
17.02.2003, 16:08
Nein, echt nicht. Es ist alles i.O. die Datenquelle habe ich seit dem Umzug der Tabelle nicht verändert!

Es irritiert mich auch total, dass ich den Datensatz nicht löschen kann. Und wenn ich mit einem neuen Recordset versuche darauf zuzugreifen, finde ich ihn nicht (nomatch)

Das kann doch alles nicht war sei ... ich drehe noch durch ... außerdem ist mein Vorrat an Goldbärchen und Schokolade bei diesem Problem draufgegangen und ich bin auf Entzug :D

Aber mal im Ernst: kann der Fehler in den Benutzerrechten oder sowas liegen? Ich habe auf Accessseite keine Berechtigungen vergeben und manuelle Eingaben im Datenblatt der entsprechenden Tabelle werden akzeptiert - und die kann ich dann auch wieder löschen oder per Recordset finden ...

Arne Dieckmann
17.02.2003, 16:11
Tut mir leid. Ich weiss leider auch nicht mehr weiter. BTW: Ist dieses Problem nur bei dem Listenfeld bzw. bei der Tabelle (auf dem das Listenfeld basiert) vorhanden?

DarthPatrick
17.02.2003, 16:14
es betrifft nur die Datensätze, die ich mit dem Recordset-Klimbim einfüge. Alle anderen Datensätze werden angezeigt, ich kann sie löschen usw. Auch im selben Listenfeld ...
Danke für die Hilfe!

Arne Dieckmann
17.02.2003, 16:16
Ja. Das habe ich verstanden. Ich wollte nur wissen, ob Du Datensätze in anderen Tabellen mittels RecordSet-KlimBim anfügen/löschen kannst.

DarthPatrick
17.02.2003, 16:17
in lokalen Tabellen ja, aber ich versuche noch mal eine weitere auf dem SQL-Server ... Danke!

Arne Dieckmann
17.02.2003, 16:23
Hast Du in der Problemtabelle einen Primärschlüssel (Autowert/ID). Wenn nicht, dann füge mal einen ein. MS-SQL Server sind dabei etwas "eigen".

DarthPatrick
17.02.2003, 18:17
nachdem ich jetzt erstmal ein paar Pfund Schoko von der Tanke nachgelegt habe :D :D hab ichs dann noch mal versucht.

Primärschlüssel und Autowert waren gesetzt, allerdings hat Access/SQL-Server es übel genommen, das ich die Tabelle nach dem einbinden umbenannt habe ... da soll mal einer drauf kommen.

kaum das ich die Tabelle mit der Originalnamen vom SQL-Server neu eingebunden und nicht umbenannt hatte lief alles wieder reibungslos ... supi!!

Und dafür habe ich einen ganzen Nachmittags nichts weiter geschafft :mad:

Vielen Dank für die Hilfe. Sonst hätte ich wahrscheinlich schon viel früher aufgegeben. Kurios ist nur, das ich auf eine andere Tabelle (ebenfalls umbenannt) fehlerfrei zugreifen konnte - die liegt natürlich auch auf dem SQL-Server ...

DarthPatrick
18.02.2003, 10:15
Hallo, da bin ich wieder mit meinem Problem von gestern.

Als ich das Büro verlassenhatte lief alles und heute morgen wieder genau der gleiche Fehler wie gestern. Er zeigt die Datensätze in meinem Listenfeld nicht an und wenn ich versuche den mit VBA/Recordset angefügten Datensatz im Tabellendatenblatt per Hand zu löschen erscheint der Fehler: "Das Microsoft-Jet Datenbankmodul hat den Vorgang angehalten, da sie und ein weiterer Benutzer gleichzeitig versuchen, dieselben Daten zu verändern" ... Mit anderen Tabellen auf dem SQL-Server klappt das. Die Tabelle mat einen Primärschlüssel und einen Autowert.

Hat jemand eine Idee woran es noch liegen könnte ?! Danke!

DarthPatrick
18.02.2003, 11:37
nur falls noch mal jemand daruaf reinfällt:
ich hatte eine Tabelle lokal im Access erstellt, getestet und für gut befunden und anschließend auf den SQL-Server geschoben. Die Probleme relusieren anscheinend aus zwei Ja/Nein Feldern, die auf dem SQL-Server in den Datentyp "Bit" umgesetzt werden ... lösche ich die zwei Felder funktioniert alles wie gehabt.

Nur schade, dass ich die Ja/Nein-Felder jetzt anders lösen muss :bawling:
aber damit werde ich wohl leben können

Danke für die tapfere Hilfe!!

Arne Dieckmann
18.02.2003, 12:42
Hm. Wenn ich mich recht erinnere sind die Bit-Felder schon für Ja/Nein-Felder gedacht. Ich glaube, das SQL-Server aber 1 für True und 0 für False verwendet (Access benutzt intern -1 für True). Vielleicht hilft es ja.

DarthPatrick
18.02.2003, 13:10
werde ich mal austesten - aber der Hammer ist echt diese Fehlermeldung von wegen "... ein anderer Benutzer greift auf dieselben Daten ..." - wie soll ich denn da auf das Problem mit dem Bit-Datentype kommen ?!?

Ich habe das Feld jetzt auf Integer gesetzt und habe eine Tabelle mit den Ja/Nein-Texten hinterlegt. Dann zeigt er mir auch gleich ja und nein in der Datenbank an und nich 0 bzw. -1

Danke für die Hilfe!

Arne Dieckmann
18.02.2003, 13:12
Tja, das ist das leidige Thema, dass Fehlermeldungen eben nicht immer ganz richtig sind bzw. mit ihrer Aussage einen Anwender nur noch mehr verwirren. Immerhin klappt es ja jetzt.