PDA

Vollständige Version anzeigen : in anderer Tabelle speichern


horse79
19.10.2001, 07:32
Servus,

ich möchte den Inhalt von 3 Variablen in eine Tabelle per VBA speichern. Wie mach ich das? (sobald ich auf den Knopf drücke soll gespeichert werden; es sollte auch überprüft werden ob dieser Datensatz schon existiert)

Danke

Manuela Kulpa
19.10.2001, 16:37
<font face="Verdana" size="2">Hmmmmm, horse79, meinst Du nicht auch, hier fehlen ein paar Informationen??? Was ist das für eine Tabelle, wie ist sie aufgebaut, welche Variablen willst du speichern, wo befinden die sich, in welcher Beziehung stehen diese zueinander, hast du Erfahrung in VBA ...

Wie du siehst, ne Menge Fragen ;)

In der Hoffnung auf ein paar Antworten, vg</font>

horse79
22.10.2001, 09:28
Also zur genaueren Erklärung:

Ich lese den Wert von Feldern aus meinem Formular in verschiedene Variablen ein. z.B:
Name=me!..., Inhalt=me!..., Datume=me!...
Jetzt möchte ich diese Informationen in eine neue Tabelle abspeichern. Es soll also jetzt ein neur Datensatz angelegt werden. Also die Tabelle hat dann natürlich 3 Felder mit Name, Inhalt, Datum. Wenn jetzt so ein Datensatz angelegt wird, soll gleich geprüft werden ob schon ein Datensatz vorhanden ist, bei dem alle 3 Felder identisch sind mit denen die neu angelegt werden sollen.

Ich hoffe ich hab mich ein bischen verständlicher ausgedrückt.

Ich denke dass das ganze wohl nur mit SQL geht, aber da kenn ich mich gar nicht aus.

Vielen Dank

frogi
22.10.2001, 09:55
Hallo!

Öffne die Tabelle als Recordset und lege deine Variablen als neue Datensatze an.
z.B.
AddNew
Me!Formularfeld = Tabelle Feld
usw.

Ich glaub das brauchst du,

mfg frogi

horse79
22.10.2001, 11:02
Danke,

wie lautet da die Syntax genau. Des ist doch irgendwie mit set db=?????
Kannst Du mir da vielleicht nen Beipiel-Code geben, wo die tabelle geöffnet wird und der datensatz reingschrieben wird?

Dankeschön

MAP_SM
22.10.2001, 14:11
hi horse,

z.B.

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("DeineTabelle", dbOpenTable)

rst.AddNew
rst![Feld1] = Me.Feld1.Value
...
rst.Update
rst.Close

hope it helps

MAP

horse79
22.10.2001, 14:28
Super, genau so hab ich mir das vorgestellt.

Danke.

Wie kann ich überprüfen ob jetzt der Datensatz schon vorhanden ist?

Bsp.

Name=xx, Inhalt:asdf, Datum:01.01.01

in meinen Variablen stehen jetzt "xx", "asdf","01.01.01.". Dieser Datensatz soll dann nicht angelegt werden, da er ja schon existiert. Wie mache ich das?

md
22.10.2001, 15:11
Hallo Horse!
Mit dem findfirst befehl.
Wenn nichts gefunden wird ist
if rs.nomatch = true then
nicht anlegen
else
anlegen
end if
MD

horse79
22.10.2001, 15:26
Hi md,

mein Code lautet:

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("tblPlanung", dbOpenTable)
strKriterien = name
rst.FindFirst strKriterien
If rst.NoMatch Then MsgBox "Nicht gefunden"
rst.AddNew
rst![name] = name
rst.UPDATE
rst.Close

Bekomme folgende Fehlermeldung:

Operation wird für diesen Objekttyp nicht unterstützt. ;-(

bei der Zeile rst.findfirst...

In der variable name ist ein string abgespeichert. Spreche ich das Kriterium falsch an?

horse79
22.10.2001, 15:40
auch:

rst.FindFirst "name=" & Forms!frmEinsatzplanung!Unterformular!name

führt zum selben fehler

doktor
23.10.2001, 07:58
Hi Horse

Hast du deine spalte "Name" genannt den is es eine access funktion und wird eher oder später problemme bereiten.
doc

horse79
23.10.2001, 08:19
OK, hab Spalte in Tabelle umbenannt, bekomme leider immer noch den Fehler:

Dim inhalt As String
Dim strKriterien As String

inhalt = Forms!frmEinsatzplanung!Unterformular!name

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("tblPlanung", dbOpenTable)
strKriterien = inhalt
rst.FindFirst "Nachname=" & strKriterien
If rst.NoMatch Then MsgBox "Nicht gefunden"
rst.AddNew
rst![name] = inhalt
rst.UPDATE
rst.Close

End Sub

erwin
24.10.2001, 03:41
generell bei Kriterien/ SQL-Where:

wenn
- Textfeld zB: rst.FindFirst "Nachname='" & TextKrit & "'"
- Zahl zB: rst.FindFirst "DieID=" & cstr(lngDieID)
- Datum zB: rst.FindFirst "DasDatum=#" & format(datVariable,"yyyy-mm-dd") & "#"

HTH erwin...

horse79
24.10.2001, 07:27
Vielen Dank für die generelle Aufklärung.

Mein aktuellere Code lautet:

Dim inhalt As String
Dim strKriterien As String

inhalt = Forms!frmEinsatzplanung!Unterformular!name

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("tblPlanung", dbOpenTable)
strKriterien = inhalt
MsgBox strKriterien
rst.FindFirst "Nachname='" & strKriterien & "'"
If rst.NoMatch Then MsgBox "Nicht gefunden"
rst.AddNew
rst![name] = inhalt
rst.UPDATE
rst.Close

End Sub

Leider bekomme ich immer noch den Laufzeitfehler 3251 "Operation wird für diesen Objekttyp nicht unterstützt". In der Variable strKriterien steht definitiv ein String und in der Tabelle Das Feld "Nachname" ist ein Textfeld mit den Eigenschaften indiziert/nein, leere Zeilen/Nein, Eingabe erforderlich/nein und Feldgröße 50. Mehr ist nicht eingestellt.

Woran kann das liegen? Bin wahnsinnig am verzweifeln.

horse79
24.10.2001, 08:18
Vielleicht hilft ja jemand die Hilfe weiter:

Operation wird für diesen Objekttyp nicht unterstützt. (Fehler 3251)

Sie haben versucht, eine Methode auszuführen oder einer Eigenschaft einen Wert zuzuweisen, der zwar im allgemeinen für das Objekt zulässig ist, aber in dieser speziellen Instanz nicht unterstützt wird. Die Edit-Methode ist z.B. im allgemeinen für Recordset-Objekte gültig, jedoch nicht für ein Recordset-Objekt vom Typ Snapshot. Dieser Fehler kann auch in Fällen auftreten, in denen die Operation aufgrund des Typs oder Objektstatus nicht zulässig ist, z.B. wenn Sie versuchen, die MovePrevious-Methode auf ein Recordset vom Typ Vorwärts-Snapshot anzuwenden.

Ist ja recht verständlich geschrieben ;-).

Ich kapiers net

erwin
24.10.2001, 08:44
wo genau bzw. welche Anweisung führt zum Fehler ?

so long erwin...

horse79
24.10.2001, 08:48
rst.FindFirst "Nachname='" & strKriterien & "'"

Da meckert er mir.

erwin
24.10.2001, 12:47
uups, da hab ich noch was übersehen:

Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("DeineTabelle", dbOpenDynaset)

HTH erwin...

horse79
25.10.2001, 07:27
SUPER, vielen Dank Erwin,

jetzt gehts. Könntest Du mir bitte noch den Unterschied erklären. Wozu brauch ich das mit dem Dynaset, was ist snapshot? Warum nehm ich da DAO?

erwin
25.10.2001, 08:03
1) lies eimfach die OL-Hilfe zu recordset/findfirst (ist mir zu aufwändig die abzuschreiben ;) )

2) ich weiss ja nicht welche Acc. Version du hast - ab A2K gibts's ADO oder/und DAO -Recordsets und wenn man i.d. Verweisen beide aktiviert hat sollte man tunlichst bei der Deklaration festlegen, welchen Typ man nun verwendet, da sich die Methoden/Eigenschaften unterscheiden.

so long erwin