mit folgendem code:
mit diesem code:
'informix
Dim ws As Workspace
Dim con As Connection
Dim rsifx As Recordset
Set ws = CreateWorkspace("Demo", "AXENT", "axent11", dbUseODBC)
Set con = ws.OpenConnection("applixtest", , False)
Set rsifx = con.OpenRecordset("query", dbOpenDynaset)
'access
Dim db As Database
Dim rsacc As Recordset
Set db = CurrentDb
Set rsacc = db.OpenRecordset("query", dbOpenTable)
rsacc.MoveFirst
rsifx.AddNew
'undsoweiterundsofort
öffne ich 2 recodsets und versuche daten vom accessrecordset ind das
informixrs zu bekommen. nun ist das odbc-direct rs aber schreibgeschützt.
per voreinstellung. as muss ich anstellen um das zu ändern?
besten dank für evtl. hilfe im voraus.
hermann
Hermann Gahm <H.G...@gmx.de> schrieb in im Newsbeitrag:
OYk3WQkG$GA....@cppssbbsa02.microsoft.com...
...
> Set ws = CreateWorkspace("Demo", "AXENT", "axent11", dbUseODBC)
> Set con = ws.OpenConnection("applixtest", , False)
> Set rsifx = con.OpenRecordset("query", dbOpenDynaset)
>
> 'access
> Dim db As Database
> Dim rsacc As Recordset
>
> Set db = CurrentDb
> Set rsacc = db.OpenRecordset("query", dbOpenTable)
>
Hier macht mich das "query" stutzig. Vielleicht ist das ja
wirklich ein Abfragetext. Dieser muss die Primärschlüssel aller
beteiligten Tabellen enthalten, sonst => schreibgeschützt.
Zugrundeliegende Tabellen müssen natürlich auch erst mal einen PK
haben.
Auch habe ich ein Problem mit Deinem Verbindungsaufbau. Du machst
zwar oben einen ODBC-Workspace auf, setzt aber dann die Variable
db auf die CurrentDB. Das kann nicht gut gehen.
Hier ist mal ein Beispiel zum erzeugen einer
ODBC-Direkt-Verbindung
Public wsODBC as DAO.Workspace
Im Initialize meiner Klasse habe ich dann:
Set wsODBC = DBEngine.CreateWorkspace("", "", "", dbUseODBC)
Private Function getODBCDirekt(DriverType As Long) As Connection
Dim errx As Object
On Error GoTo err_getODBCDirekt
wsODBC.DefaultCursorDriver = DriverType
Set getODBCDirekt = wsODBC.OpenConnection("", , , _
"ODBC;DSN=" & mstrUserDSN & ";UID=" & mstrUserName & _
";PWD=" & mstrUserPassword & ";DATABASE=" & mstrDatabase)
exit_getODBCDirekt:
Set errx = Nothing
Exit Function
err_getODBCDirekt:
For Each errx In DBEngine.Errors
Err.Raise Err.Number, Err.Source, Err.Description,
Err.HelpFile, Err.HelpContext
Next errx
Resume exit_getODBCDirekt
End Function
Gruß
Frank
> Auch habe ich ein Problem mit Deinem Verbindungsaufbau. Du
machst
> zwar oben einen ODBC-Workspace auf, setzt aber dann die
Variable
> db auf die CurrentDB. Das kann nicht gut gehen.
>
Quark, hier habe ich Deine Frage nicht richtig gelesen. Sorry
Bleibt also nur das mit den Primärschlüsseln.
Frank
> Hier macht mich das "query" stutzig. Vielleicht ist das ja
> wirklich ein Abfragetext. Dieser muss die Primärschlüssel aller
> beteiligten Tabellen enthalten, sonst => schreibgeschützt.
> Zugrundeliegende Tabellen müssen natürlich auch erst mal einen PK
> haben.
query sind in beiden fällen tabellen. (blöde namen zugegeben...) ich krieg
die beiden recordsets auch auf, erst beim rsifx.update mag er nicht mehr.
lt. doku ist ein odbcdirect rs per default schreibgeschützt. ich fand aber
keinen hinweis darauf wie ich dem abhelfe das ich schreiben kann...
das muss doch gehen (?)
grüsse
hermann
Public Function SaveNewBlg(Buchungsnummer As Long, Streutermin As
Date, _
Agentur As Long, Kunde As Long, KundenName As String, Streuart As
Integer, _
Gewicht As Integer, ByVal rsBookings As DAO.Recordset,
Bemerkungen As String, _
Wunschtermin As Date) As Boolean
Dim conBatchUpd As DAO.Connection
Dim strSQL As String
Dim strExc As String
Dim rsTo As DAO.Recordset
Dim blnRunTrans As Boolean
On Error GoTo err_SaveNewBlg
Set conBatchUpd = getODBCDirekt(dbUseClientBatchCursor)
strSQL = "SELECT Buchungsnummer, Gem_ID, Abo_Fest, RHH_Fest, "
& _
"Bemerkung FROM tblBookings WHERE 0 = 1"
wsODBC.BeginTrans
blnRunTrans = True
strExc = "EXECUTE blg_AddJob " & Buchungsnummer & ", '" &
MilDate(Streutermin) & _
"', '" & MilDate(Wunschtermin) & "', " & Agentur & ", " &
Kunde & ", '" & KundenName & "', " & _
Streuart & ", " & Gewicht & ", '" & Bemerkungen & "'"
conBatchUpd.Execute (strExc)
Set rsTo = conBatchUpd.OpenRecordset(strSQL, dbOpenDynamic,
0, dbOptimisticBatch)
With rsBookings
.MoveFirst
While Not .EOF
rsTo.AddNew
rsTo!Buchungsnummer = Buchungsnummer
rsTo!Gem_Id = !Gem_Id
rsTo!Abo_Fest = !Abo_Fest
rsTo!RHH_Fest = !RHH_Fest
rsTo!Bemerkung = !Bemerkung
rsTo.Update
.MoveNext
Wend
End With
rsTo.Update (dbUpdateBatch)
wsODBC.CommitTrans
SaveNewBlg = True
exit_SaveNewBlg:
On Error Resume Next
rsTo.Close
Set rsTo = Nothing
conBatchUpd.Close
Set conBatchUpd = Nothing
Exit Function
err_SaveNewBlg:
If blnRunTrans Then
wsODBC.Rollback
Else
MsgBox Err.Description & vbCrLf & Err.Number & vbTab &
Err.Source, vbInformation, conCust
End If
Resume exit_SaveNewBlg
End Function
________________
Gruß
Frank
Hermann Gahm <H.G...@gmx.de> schrieb in im Newsbeitrag:
#hTerskG$GA....@cppssbbsa02.microsoft.com...
das funktioniert nicht, da Du das Recordset als "VIEW" öffnest. Wenn Du mit
ODBCDirekt arbeitest, dann solltest Du auf jedem Fall mit den SQLBefehlen
arbeiten:
Beispiel:
Anstelle von einem Recordset in ein anderes zu "kopieren", verwende SQL:
"INSERT INTO tbl..." usw.
--
Gruß, Uwe Ricken
MCP FOR MS ACCESS DEVELOPMENT
GNS GmbH, Frankfurt am Main
Hermann Gahm <H.G...@gmx.de> schrieb in im Newsbeitrag:
OYk3WQkG$GA....@cppssbbsa02.microsoft.com...
> Hallo NG,
>
> mit folgendem code:
>
> mit diesem code:
>
> 'informix
> Dim ws As Workspace
> Dim con As Connection
> Dim rsifx As Recordset
>
> Set ws = CreateWorkspace("Demo", "AXENT", "axent11", dbUseODBC)
> Set con = ws.OpenConnection("applixtest", , False)
> Set rsifx = con.OpenRecordset("query", dbOpenDynaset)
>
> 'access
> Dim db As Database
> Dim rsacc As Recordset
>
> Set db = CurrentDb
> Set rsacc = db.OpenRecordset("query", dbOpenTable)
>
> rsacc.MoveFirst
> rsifx.AddNew
> 'undsoweiterundsofort
das krieg ich nicht gebacken:
> Anstelle von einem Recordset in ein anderes zu "kopieren",
verwende SQL:
> "INSERT INTO tbl..." usw.
>
funktioniert ja schön, wenn ich in einer Welt bleibe. Aber wie
löse ich mit diesem Ansatz unter ODBC-Direkt die Aufgabe, eine
Access-Tabelle auf den SQL-Server zu schaufeln?
Hast Du bitte ein kleines Beispiel?
Danke
Frank
Ich glaube, jetzt sollte ich mal meine Abneigung gegen
eingebundene Servertabellen ablegen.
Dann geht's natürlich problemlos.
Gruß
Frank
Frank Hammerschmidt <Frank.Ham...@lr-online.de> schrieb in
im Newsbeitrag: OoEQsPlG$GA.276@cppssbbsa04...
vielleicht war meine Erklärung etwas unklar (schäm).
Folgendes:
Wenn Du ein TSQL-Statement an ein Recordset bindest, dann ist das immer
schreibgeschützt (genau wie Views).
Deswegen kann natürlich in dieses Recordset kein Datensatz eingefügt werden.
Stattdessen kann Hermann mit PassThrough-Abfragen die Daten in die andere
Tabelle "kopieren"
Beispiel ACC97 und DAO
Dim DB As Database
Dim RS As RecordSet
Dim QDef As QueryDef
Dim strSQL As String
Set DB = CUrrentDB()
Set RS = db.OpenRecordSet("KopierTabelle", dbOpenForwardOnly)
Set QDef = DB.CreateQueryDef("")
While Not rs.Eof
strSQL = "INSERT INTO Zieltabelle (Feld1, Feld2, Feld3...) VALUES (" &
rs.Fields(1) & "," & rs.Fields(2)... & ")"
With QDef
.Connect = ODBCKonfig
.SQL = strSQL
.ReturnsRecords = True
.Execute
End With
rs.MoveNext
Wend
set QDef = Nothing
Set RS = Nothing
Set DB = NOthing
Ich war leider zu faul, einen Beispielcode dazu zu geben. Das habe ich nun
getan.
Einen schönen Abend noch
--
Gruß, Uwe Ricken
MCP FOR MS ACCESS DEVELOPMENT
GNS GmbH, Frankfurt am Main
Frank Hammerschmidt <Frank.Ham...@lr-online.de> schrieb in im
Uwe Ricken <ric...@gns-online.de> schrieb in im Newsbeitrag:
eKqrKclG$GA....@cppssbbsa02.microsoft.com...
...
> Wenn Du ein TSQL-Statement an ein Recordset bindest, dann ist
das immer
> schreibgeschützt
nein!
> (genau wie Views).
nein!
siehe Bsp. oben
Gruß
Frank
> Set rsTo = conBatchUpd.OpenRecordset(strSQL, dbOpenDynamic,
> 0, dbOptimisticBatch)
>
> With rsBookings
> .MoveFirst
> While Not .EOF
> rsTo.AddNew
> rsTo!Buchungsnummer = Buchungsnummer
> rsTo!Gem_Id = !Gem_Id
> rsTo!Abo_Fest = !Abo_Fest
> rsTo!RHH_Fest = !RHH_Fest
> rsTo!Bemerkung = !Bemerkung
> rsTo.Update
> .MoveNext
> Wend
> End With
werd ich so morgen mal probieren.
das sieht so aus als würde es das machen was ich möchte...
vielen dank einstweilen.
hermann
Frank
Frank Hammerschmidt <Frank.Ham...@lr-online.de> schrieb in
im Newsbeitrag: #5r2T4kG$GA.249@cppssbbsa05...
> Set rsTo = conBatchUpd.OpenRecordset(strSQL, dbOpenDynamic,
> 0, dbOptimisticBatch)
>
> With rsBookings
> .MoveFirst
> While Not .EOF
> rsTo.AddNew
> rsTo!Buchungsnummer = Buchungsnummer
> rsTo!Gem_Id = !Gem_Id
> rsTo!Abo_Fest = !Abo_Fest
> rsTo!RHH_Fest = !RHH_Fest
> rsTo!Bemerkung = !Bemerkung
> rsTo.Update
> .MoveNext
> Wend
> End With
>
> rsTo.Update (dbUpdateBatch)
>
> wsODBC.CommitTrans
> SaveNewBlg = True
>
> exit_SaveNewBlg:
> On Error Resume Next
> rsTo.Close
> Set rsTo = Nothing
> conBatchUpd.Close
> Set conBatchUpd = Nothing
>
> Exit Function
>
> err_SaveNewBlg:
> If blnRunTrans Then
> wsODBC.Rollback
> Else
> MsgBox Err.Description & vbCrLf & Err.Number & vbTab &
> Err.Source, vbInformation, conCust
> End If
> Resume exit_SaveNewBlg
>
> End Function
>
> ________________
>
> Gruß
>
> Frank
>
> Hermann Gahm <H.G...@gmx.de> schrieb in im Newsbeitrag:
> .ReturnsRecords = True
????
Und: Hast Du eventuell mal die Performance dieser mit der anderer
Uploadmöglichkeiten verglichen. Würde mich wirklich
interessieren.
Gruß
Frank
sorry, da hast Du recht. Eine Aktionsabfrage liefert natürlich keine
Datensätze zurück!
Bezüglich der Views/SQL-Statements würde mich aber mal doch interessieren,
ob Du schon einmal in das Ergebins einer PassThroughQuerry weitere
Datensätze einfügen konntest.
Bezüglich der Performance haben wir auch schon Tests durchgeführt und waren
bei INSERTS mittels PTQ wesentlich schneller, als mit AddNew über ein
RecordSet
--
Gruß, Uwe Ricken
MCP FOR MS ACCESS DEVELOPMENT
GNS GmbH, Frankfurt am Main
Frank Hammerschmidt <Frank.Ham...@lr-online.de> schrieb im Beitrag
<#GO5PJnG$GA.282@cppssbbsa04>...
Uwe Ricken <ric...@gns-online.de> schrieb in im Newsbeitrag:
01bf1ae9$35d95180$ac1b...@pc172.bartsch.de...
>
> Bezüglich der Views/SQL-Statements würde mich aber mal doch
interessieren,
> ob Du schon einmal in das Ergebins einer PassThroughQuerry
weitere
> Datensätze einfügen konntest.
>
von PT's war ja zum diesem Zeitpunkt keine Rede. Das geht
natürlich nicht.
> Bezüglich der Performance haben wir auch schon Tests
durchgeführt und waren
> bei INSERTS mittels PTQ wesentlich schneller, als mit AddNew
über ein
> RecordSet
dafür vielen Dank
Gruß
Frank