PDA

Vollständige Version anzeigen : recordset


nic
20.01.2003, 09:19
Hallo Forum!
Was stimmt hier nicht, bekomme keine Fehlermeldung, aber es funktioniert auch nicht!

Dim db As Database, fld As Field, tdef As TableDef
Dim rs As Recordset

Set tdef = db.TableDefs("Import")


Set fld = tdef.CreateField("Modulname", dbText, 255)
tdef.Fields.Append fld
Set fld = tdef.CreateField("Versionsnummer", dbInteger)
tdef.Fields.Append fld
db.TableDefs.Append tdef
Set rs = db.OpenRecordset("Import")
rs.Fields("Modulname") = Beschreibung
rs.Fields("Versionsnummer") = Version
rs.Update
Danke
Nicole

Rol
20.01.2003, 09:30
Hallo Nicole,

Vor dem zuweisen der Daten füge mal
rs.AddNew ein.

Gruss Rol

nic
20.01.2003, 09:35
Danke aber wenn ich mit den Debugger hingehe, steht:
Objektvariable oder With - Blockvariable nicht festgelegt!
LG
Nicole

Aquarii
20.01.2003, 09:40
Hallo Nicole,

welche Accessversion setzt Du ein?

Checke mal, ob Du den Verweis auf die DAO-Bibliothek (Extras/Verweise) gesetzt hast und ob dieser oberhalb des ADO-Verweises steht.

Eventuell solltest du noch die Variablendeklaration anpassen:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Karlheinz
20.01.2003, 09:45
Hallo Nicole,

es fehlt

set db = CurrentDb() dann
Set tdef = db.TableDefs("Import")

Gruß Karlheinz

nic
20.01.2003, 09:46
Habe nur auf Microsoft DAO 3.6 Object Liberary einen Verweis angegeben und jetzt
Dim db As DAO.Database, fld As Field, tdef As TableDef
Dim rs As DAO.Recordset
so geändert!
Bleibt der gleiche Fehler!
LG
Nicole

nic
20.01.2003, 09:49
Danke Karlheinz
Das war`s!
LG
Nicole

nic
20.01.2003, 10:52
Jetzt sollen die Daten nicht an eine Tabelle sondern an drei geschrieben werden.
Modulname geht in Softwaremodul und bekommt dort einen Autowert als Index.
Dann soll die Versionsnummer in die Tabelle Modulversion mit eben dieser Modulnummer.
Kann mir jemand einen Tip geben.
Danke
Nicole

nic
20.01.2003, 13:42
Weiß hier niemand einen Rat wie ich das mit mehren verbundenen Tabellen mache?
LG
Nicole

nic
21.01.2003, 09:23
Hallo!
Versuche noch immer die importierten Daten in mehrere Tabellen aufzuteilen:
INSERT INTO Import ( Versionsnummer )
SELECT [Softwaremodul].[Modulnummer]
FROM Softwaremodul INNER JOIN Modulversion ON [Softwaremodul].[Modulnummer]=[Modulversion].[Modulnummer]
WHERE ((([Modulversion].[Versionsnummer_Grintec])=1));
Das ist meine Anfügeabfrage, die ich über currentdb.execute
in meinen Code einfügen möchte, aber dann bin ich draufgekommen, dass es natürlich alle die VNr=1 haben, ändert, der PK ist ein Autowert wie kann ich mich daraufbeziehen??????????????
Das ist meine EinleseFunktion:
Public Function UebergeheKopfzeilen( _
ByVal vstrDateiName As String, _
ByVal vstrErstesZeichen As String) _
As String

On Error Resume Next

Dim strResultat As String
Dim strResultat1 As String
Dim strZeile As String
Dim strZeile1 As String
Dim DateiNr As Integer
Dim Modulname As String
Dim Version As String
Dim Beschreibung As String
Dim strBeschreibung As String
Dim strAnforderung As String
Dim strx As String
Dim stry As String
Dim mod_vers As Integer
Dim db As DAO.Database, fld As Field, tdef As TableDef
Dim rs As DAO.Recordset
Dim qdfTemp As QueryDef
Dim qdfNew As QueryDef
Dim intx As Integer
Dim inty As Integer






strResultat = vbNullString ' Datei existiert und ist kein Ordner

If (GetAttr(vstrDateiName) And vbDirectory) = 0 Then ' freies Datei Handle besorgen
DateiNr = FreeFile ' Datei zum Einlesen mit DateiNr öffnen
Open vstrDateiName For Input As #DateiNr
mod_vers = 0

Do While Not EOF(DateiNr)
Line Input #DateiNr, strZeile
'strZeile = Input(100, #DateiNr)

If Len(Trim$(strZeile)) > 0 And Left$(strZeile, 1) <> vstrErstesZeichen Then
' Kopfzeilen ueberlesen, bis in Zeile Text steht, der <> vstrErstesZeichen ist

'Einlesen Modulname und Version
If mod_vers = 0 Then
strResultat = strZeile
Beschreibung = fctSplit(strResultat, " ", 0)
Version = fctSplit(strResultat, " ", 1)
inty = DCount("*", "Import", "[Modulname]='" & strx & "'") 'zählt die vorhandenen Module mit dem Namen strx
If inty > 0 Then Exit Do

Else
Set db = CurrentDb()
Set tdef = db.TableDefs("Softwaremodul")
Set fld = tdef.CreateField("Modulname_intern", dbText, 255)
tdef.Fields.Append fld

db.TableDefs.Append tdef
Set rs = db.OpenRecordset("Softwaremodul")
rs.AddNew
rs.Fields("Modulname_intern") = Beschreibung
rs.Update

Set fld = tdef.CreateField("Versionsnummer", dbInteger)
tdef.Fields.Append fld
db.TableDefs.Append tdef
Set rs = db.OpenRecordset("Modulversion")
rs.Fields("Versionsnummer") = Version
rs.AddNew
rs.Update
End If

Debug.Print Beschreibung
Debug.Print Version
mod_vers = 1
End If

'Einlesen des Description-Teiles
If strZeile = "description" Then
Do While Not EOF(DateiNr)
Line Input #DateiNr, strZeile
If Trim$(UCase(strZeile)) = "END" Then Exit Do 'Schleife bei "end" verlassen

strResultat = strZeile
Set db = CurrentDb()
Set tdef = db.TableDefs("Softwaremodul")
Set fld = tdef.CreateField("Kurzbeschreibung", dbMemo)
tdef.Fields.Append fld

db.TableDefs.Append tdef
Set rs = db.OpenRecordset("Softwaremodul")
rs.AddNew
rs.Fields("Kurzbeschreibung") = strResultat
rs.Update


Debug.Print strResultat
Loop
End If

'Einlesen des Requires-Teiles
If strZeile = "requires" Then
Do While Not EOF(DateiNr)
Line Input #DateiNr, strZeile
If Trim$(UCase(strZeile)) = "END" Then Exit Do 'Schleife bei "end" verlassen

strx = fctSplit(strZeile, " ", 0)
stry = fctSplit(strZeile, " ", 1)
' Temporäres QueryDef-Objekt erstellen.

intx = DCount("*", "Import", "[Modulname]='" & strx & "'") 'zählt die vorhandenen Module mit dem Namen strx
If intx > 0 Then




MsgBox "Modul gibt es schon!"
Else

Set db = CurrentDb()
Set tdef = db.TableDefs("Import")
Set fld = tdef.CreateField("Modulname", dbText, 255)
tdef.Fields.Append fld

db.TableDefs.Append tdef
Set rs = db.OpenRecordset("Softwaremodul")
rs.AddNew
rs.Fields("Modulname") = strx

rs.Update
Set fld = tdef.CreateField("Versionsnummer", dbInteger)
tdef.Fields.Append fld
db.TableDefs.Append tdef
Set rs = db.OpenRecordset("Modulversion")
rs.Fields("Versionsnummer") = stry
rs.AddNew
rs.Update

Debug.Print strx
Debug.Print stry
End If
Loop
End If

End If 'End-If Zeile nicht leer und keine Kommentarzeile
Loop
End If







' Datei schliessen
Close #DateiNr









End Function
Weiß wer wie ich das lösen kann!
Danke
Nicole

nic
21.01.2003, 10:50
Kann mir jemand sagen wie man die Syntax richtig schreibt,
danke
Nicole
CurrentDb.Execute " INSERT INTO Modulversion ( Modulnummer, Versionsnummer_Grintec )"
SELECT Softwaremodul.Modulnummer, Softwaremodul.Modulversion
FROM Softwaremodul
WHERE (((Softwaremodul.Modulname_intern) Like "Beschreibung"));"

nic
21.01.2003, 11:42
Ich habe es jetzt mit connection probiert, komme aber nicht weiter!
Bitte!
Brauche das dringend:
Set cmd = New ADODB.Command


With cmd 'Hier werden die Pflichfelder ausgelesen
Set ActiveConnection = CurrentProject.Connection
.CommandText = "select Modulnummer,Modulversion from Softwaremodul where Modulname_intern = Beschreibung"

.Parameters(0).Value = frm.Name
Set rs = .Execute

m_Pflichtfelder = rs(0)

Set rs = Nothing
End With

Set cmd = Nothing
Wie gebe ich das der anderen Tabelle?

Sascha Trowitzsch
21.01.2003, 11:54
Sorry, nic, aber es bei dir wirklich grundsätzlich drunter und drüber! :mad:

Du postest zwar jede Menge Code (den zu analysieren die User hier sich viel Zeit nehmen müssen), deine Problembeschreibungen sind aber recht dürftig. Man darf jeweils raten, auf was es dir eigentlich ankommt.

Wieso bist du jetzt auf einmal mit ADO-Code zur Hand, wo's oben noch DAO war?

Was soll man sich unter sowas vorstellen:
Wie gebe ich das der anderen Tabelle?

Welche Tabelle? Was hat das Recordset mit irgendeiner anderen Tabelle zu tun?

Du hast nun 5 Beiträge hintereinander geschrieben, die verschieden Problemstellungen zum Inhalt haben, ohne dass du jeweils auf eine Antwort gewartet hättest. Oder interessieren die dich immer nur minutenweise?

Das musste ich als Moderator leider mal loslassen. Ciao, Sascha

nic
21.01.2003, 12:08
Erstens habe ich keine Antwort bekommen.
Zweitens habe ich verschiedene Varianten durchprobiert, die aber alle nicht
die richtigen waren!

Ich habe eine Tabelle Softwaremodule die eine 1:n Beziehung zu Modulversion hat.
Da ich das ganze aus einer Textdatei importiere, sollen die Daten in Verschiedene Tabellen.
Die Modulversion soll in die Tabelle Modulversion.
Nun habe ich eine Spalte Modulversion in Softwaremodule als importhilfe erzeugt, die soll aber in die Tabelle Modulversion mit der richtigen Modulnummer!
Softwaremodul hat die Spalten :Modulnummer(Autowert), Name usw...
Deswegen habe ich mir gedacht mit einem select statement wäre das kein Problem, kann es aber nicht in VBA ausführen!
Danke
Nicole