Seite 1 von 1

Access VBACode Konvertierung nach PB ?

Verfasst: 28.02.2009 20:10
von TheSaint
Hallo Zusammen,

ich habe folgenden Access VBACode, den ich in PB umsetzen muss und ich komme einfach nicht weiter:

Code: Alles auswählen

Set DB = CurrentDb
strSQL = "SELECT DatevBuchungenExp.* " & _
                 "FROM DatevBuchungenExp;"
Set RSalt = DB.OpenRecordset(strSQL, dbOpenSnapshot)
Set RSneu = DB.OpenRecordset("DatevBuchungenExpNeu", dbOpenDynaset)
    
    If Not RSalt.BOF Then
        RSalt.MoveFirst
    End If
    
    While Not RSalt.EOF

        If Not RSalt.EOF Then                                  <========== ab hier komme ich nicht weiter
            'Übertragung des Originalbuchungssatzes
            RSneu.AddNew
                For Each Fld In RSalt.Fields
                RSneu(Fld.Name) = Fld.Value
                Next
            RSneu("lfdNr") = i
            RSneu.Update
            i = i + 1
                Select Case RSalt("Datev_BU")
                    Case 99, 98
                        Select Case RSalt("ArtHaben")
                            Case 20, 71
            usw.....
                End Select



Soweit bin ich bereits:

Code: Alles auswählen

DBOpenOrClose(0) ;Hier wird eine Procedure aufgerufen (Wert 0 = Datenbank öffnen; Wert 1 = Datenbank schliessen)
    If IsDatabase(db)
        SQL = "Select * from DatevBuchungenExp"
            If DatabaseQuery(db, SQL)
                While NextDatabaseRow(db)
                    
                
                
                
                Wend
            EndIf
    EndIf
Wäre toll, wenn mir hier jemand helfen könnte.
Hoffe, das der VBA - Code verständlich ist.

Schon mal vielen Dank für Eure Hilfe.

Re: Access VBACode Konvertierung nach PB ?

Verfasst: 28.02.2009 21:03
von Kiffi
TheSaint hat geschrieben:und ich komme einfach nicht weiter:
verstehe ich jetzt nicht. Du hast hier doch schon vor Wochen PB-Code
gepostet, der genau das macht.

Grüße ... Kiffi

Verfasst: 28.02.2009 23:49
von TheSaint
Hallo Kiffi,

vielen Dank für Deine Antwort.

Hm, zur Zeit schreibe ich alle Module des VBA - Projektes in PB um.
Dieses VBA-Code-Sequenz habe ich heute früh begonnen zu übernehmen.
Bin jetzt auch schon ein Stückchen weiter:

Code: Alles auswählen

                                             For Counter = 0 To DatabaseColumns(db) - 1
                                                 If Counter = 0
                                                     SQL = "INSERT INTO ObjekteGmbHJN VALUES( " + GetDatabaseString(db, Counter) + ", "
                                                 Else
                                                     SQL = SQL + GetDatabaseString(db, Counter) + ", "
                                                 EndIf
                                             Next                                                    
                                             Left(SQL, (Len(SQL)-2))
                                             SQL = SQL +");"
                                                 If DatabaseQuery(db, SQL)
Hab den Wald vor lauter Bäumen irgenwie nicht gesehen. Oder zu kompliziert gedacht.

Nur komme ich leider nicht weiter im Bezug auf folgenden VBA Code:

Code: Alles auswählen

Select Case RSalt("Datev_BU")
Kann ich in PB auch direkt auf eine mit Select auf den Inhalt einer eingelesenen Zelle zugreifen?
Oder muss ich das in ein Array einlesen und dann weiterverarbeiten?

Schon mal vielen Dank für Eure Hilfe.[/code]

Verfasst: 01.03.2009 00:20
von Kiffi
Achtung: Falle!
TheSaint hat geschrieben:

Code: Alles auswählen

Left(SQL, (Len(SQL)-2))
Oder schreib es gleich so:

Code: Alles auswählen

SQL = ""
For Counter = 0 To DatabaseColumns(DB) - 1
  If Counter = 0
    SQL = "INSERT INTO ObjekteGmbHJN VALUES( " + GetDatabaseString(DB, Counter) 
  Else
    SQL + GetDatabaseString(DB, Counter) 
  EndIf
  If Counter < DatabaseColumns(DB) - 1
    SQL + ", "
  Else
    SQL + ")"
  EndIf
EndIf
TheSaint hat geschrieben:Nur komme ich leider nicht weiter im Bezug auf folgenden VBA Code:

Code: Alles auswählen

Select Case RSalt("Datev_BU")

Code: Alles auswählen

Datev_BU = GetDatabaseString(DB, [spaltennummer])
Select Datev_BU
  [...]
siehe auch:
PB-Hilfe hat geschrieben:[GetDatabaseString]
Hinweis: Dieser Befehl kann nur einmalig für jede Spalte aufgerufen
werden (die erhaltenen Daten müssen in einer Variable gespeichert
werden, wenn sie mehr als einmal benötigt werden), da alle
nachfolgenden Aufrufe einen falschen Wert liefern werden. Dies ist eine
ODBC-Einschränkung.
Grüße ... Kiffi

Verfasst: 01.03.2009 00:35
von TheSaint
Hallo Kiffi,

vielen Dank für Deine Tipps.
Werde sie sofort anwenden.

Verfasst: 01.03.2009 00:40
von Kiffi
ich persönlich greife lieber auf Feldnamen zu (anstelle einen Index zu
übergeben). Leider wird das von PB nicht angeboten. Aus diesem Grund
habe ich mir eine kleine Hilfsroutine geschrieben:

Code: Alles auswählen

Procedure.s GetDatabaseStringX(DB, Fieldname.s)
  
  Protected Counter
  
  For Counter = 0 To DatabaseColumns(DB)
    If LCase(DatabaseColumnName(DB, Counter))=LCase(Fieldname)
      ProcedureReturn GetDatabaseString(DB, Counter)
    EndIf
  Next
  
EndProcedure
somit kann man dann auch direkt mittels Namen auf das Feld zugreifen:

Code: Alles auswählen

Datev_BU = GetDatabaseStringX(DB, "Datev_BU") 

Verfasst: 01.03.2009 00:45
von TheSaint
Hallo Kiffi,
Kiffi hat geschrieben:ich persönlich greife lieber auf Feldnamen zu (anstelle einen Index zu
übergeben). Leider wird das von PB nicht angeboten. Aus diesem Grund
habe ich mir eine kleine Hilfsroutine geschrieben:

somit kann man dann auch direkt mittels Namen auf das Feld zugreifen:

Code: Alles auswählen

Datev_BU = GetDatabaseStringX(DB, "Datev_BU") 
Ja, ich greife auch lieber auf Feldnamen zu. Genau danach suchte ich. Hatte gedacht es gibt hierfür in PB einen Befehl.

Mit der Hilfsroutine hast du mir super viel geholfen.
Vielen Dank :D