| |
VB & DatenbankenDatenbankabgleich / Protokolldatei erstellen | | | Autor: Dirk.B | Datum: 26.04.12 15:14 |
| Hallo zusammen!
Ich habe mir ein Programm unter VBA / AutoCAD geschrieben, in dem ich ein Verzeichnis auswählen
kann und im Durchlauf die Dateinamen (Blocknamen) mit unseren Artikelbezeichnungen in einer Datenbank verglichen werden.
Sollten diese 1:1 übereinstimmen, so wird ein Verzeichnisstring zu dem Artikel in der Datenbank hinzugefügt.
Bei dem Wust an Daten ist es allerdings nicht mal eben nachzuhalten, wo es eben diese 1:1 überstimmungen gab und wo nicht.
Ich möchte mir nun gerne eine kleine Protokolldatei *.txt zu nutzen machen, in der hineingeschrieben wird, wo es 1:1 paßte und wo eben auch nicht, um zu Prüfen, ob der Dateiname oder die Artikelbezeichnung fehlerhaft ist.
Hier mal ein Teilausschnitt aus meinem Tool:
Private Sub cmdDurchlauf_Click()
'--Variablen für Verzeichnis / Dateiauswahl---------------------------------
Dim ImportPfad As String
Dim ExportPfad As String
Dim Dateiname As String
Dim SuchWert As String
Dim SuchErgebnisDWG As String
Dim SuchErgebnisPDF As String
'--ImportPfad und ExportPfad festlegen---------------------------------------
ImportPfad = TextBox1.Value & "\" 'Das Verzeichnis wird über Ordnerauswahl
' ausgewählt
ExportPfad = ImportPfad
'--Variablen Allgemein-------------------------------------------------------
Dim DateiZahl As String, i As Integer
i = 0
DateiZahl = Dir$(ImportPfad & "*.dwg")
If DateiZahl = "" Then GoTo MyErrorHandler
Do While DateiZahl <> ""
i = i + 1
DateiZahl = Dir$()
Loop
Dateiname = Dir(ImportPfad & "*.dwg")
'##--Datenbankanbindung an die SQL - Datenbank--!!!
Dim Cn As New ADODB.Connection
With Cn
.CursorLocation = "#######"
.Provider = "#######"
.ConnectionString = "Data Source='#######'; Initial Catalog='#######';User" & _
"ID='#######';Password='#######'"
.Open
End With
'--ab hier mein Test bislang--
Dim sFile As String
Dim F As Integer
sFile = ImportPfad & "\" & "\Protokoll.txt"
F = FreeFile
Open sFile For Output As #F
Print #F, "Folgende Block / Artikelverknüpfungen wurden erstellt: " & vbCrLf
Do While Dateiname <> ""
DoEvents
Me.Caption = ImportPfad & Dateiname
SuchWert = Left(Dateiname, Len(Dateiname) - 6)
SuchErgebnisDWG = ImportPfad & SuchWert & "_D.dwg"
SuchErgebnisPDF = ImportPfad & SuchWert & ".pdf"
DoEvents
'--eigentlich müßte ja hier die Abfrage lauten wenn dann, dann schreibe in die
' Protokolldatei
'--Bei folgenden Dateien kam es zu einer Übereinstimmung:
'--Blockname / Artikelbezeichnung
'--APV-150-STBL 65 mm APV-150-STBL 65 mm
'--usw.
'--Bei folgenden Dateien kam es zu keiner Übereinstimmung:
'--Blockname / Artikelbezeichnung
'--APV-150-STBL 85 mm
'--usw.
If OB_Update.Value = True Then
With Cn
.Execute "Update PROD_DEFINITION Set M_ZNAME_PLINE = '" & _
SuchErgebnisDWG & "' Where PD_NUM = '" & SuchWert & "'"
.Execute "Update PROD_DEFINITION Set M_ZEICHNUNGSNAME = '" & _
SuchErgebnisPDF & "' Where PD_NUM = '" & SuchWert & "'"
End With
End If
Print #F, ImportPfad & SuchWert; vbCrLf; SuchErgebnisPDF
Dateiname = Dir
Loop
Close #F
Cn.Close
Set Cn = Nothing
Exit Sub
MyErrorHandler:
MsgBox "Es wurde kein Verzeichnis ausgewählt", 64, "Hinweis"
End Sub Kann mir da jemand weiter helfen?
Das wäre echt super.
Vielen Dank im Voraus.
VG
Dirk | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: wb-soft | Datum: 26.04.12 21:21 |
| Hi!
Un wie lautet jetzt die Frage?
mfg
WB | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: Dirk.B | Datum: 27.04.12 11:39 |
| Hallo WB!
Wie kann ich das in einer *.txt Datei protokollieren, wenn es eine Übereinstimmung gab und
wenn nicht, welche Datei davon betroffen ist, damit diese separat prüfen kann.
If OB_Update.Value = True Then
With Cn
.Execute "Update PROD_DEFINITION Set M_ZNAME_PLINE = '" & _
SuchErgebnisDWG & "' Where PD_NUM = '" & SuchWert & "'"
.Execute "Update PROD_DEFINITION Set M_ZEICHNUNGSNAME = '" & _
SuchErgebnisPDF & "' Where PD_NUM = '" & SuchWert & "'"
End With
End If Ist SuchErgebnisDWG = Suchwert dann schreibe in die *.txt
Bei folgenden Dateien gab es eine Übereinstimmung:
xxxxxx
xxxxxx
Ist SuchErgebnisDWG <> Suchwert dann schreibe in die *.txt
Bei folgenden Dateien gab es keine Übereinstimmung:
xxxxxx
xxxxxx
Wie müßte dazu der Programmcode lauten?
VG
Dirk | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: Dirk.B | Datum: 27.04.12 14:42 |
| Hallo zusammen!
Ich hab noch mal so einges probiert, aber bin mir nicht sicher, ob ich damit auf dem richtigen Weg bin.
Vieleicht ist es so aber zu verstehen, was ich möchte.
Do While Dateiname <> ""
DoEvents
Me.Caption = ImportPfad & Dateiname
SuchWert = Left(Dateiname, Len(Dateiname) - 6)
SuchErgebnisDWG = ImportPfad & SuchWert & "_D.dwg"
SuchErgebnisPDF = ImportPfad & SuchWert & ".pdf"
DoEvents
'If OB_Update.Value = True Then
Set rs = Cn.Execute("SELECT PROD_DEFINITION.PD_NUM FROM" & _
"PROD_DEFINITION")
If (rs!PD_NUM & "") = SuchWert Then
ArtNr = (rs!PD_NUM & "")
Print #F, SuchWert & " = " & ArtNr
Dateiname = Dir
Cn.Execute "Update PROD_DEFINITION Set M_ZNAME_PLINE = '" & _
SuchErgebnisDWG & "' Where PD_NUM = '" & SuchWert & "'"
Else
Print #F, SuchWert & " = " & "???"
Dateiname = Dir
End If
Loop
Close #F Es wäre super, wenn mir da jemand weiter helfen könnte.
Vielen Dank.
VG
Dirk | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: wb-soft | Datum: 28.04.12 06:58 |
| Hi!
Wenn ich richtig verstanden habe mußt du die Daten in 2 Arrays zwischenspeichern, und erst am Schluß alles in einem Rutsch in die Datei schreiben.
mfg
WB | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: Dirk.B | Datum: 30.04.12 16:32 |
| Hallo WB!
Ich habs und so funktionierts.
'####NEU------------------------------------------------------------------------
Dim rs As New ADODB.Recordset
Set rs = Cn.Execute("select * FROM PROD_DEFINITION where PD_NUM = '" & Suchwert _
& "'")
If Not rs.EOF Then
Print #F, Suchwert; Tab(25); "="; Tab; Suchwert
Else
Print #F, Suchwert; Tab(25); "="; Tab; "?" & " muß geprüft werden"
End If
'####NEU------------------------------------------------------------------------ Gruß
Dirk
VG
Dirk | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: wb-soft | Datum: 30.04.12 20:39 |
| Hi!
Damit hast du natürlich ein Ergebnis für diesen einen Datensatz.
Du kannst auch diesen Teil des Codes für jeden Datensatz wiederholen,
und hast damit eine vollständige, aber unsortierte Liste.
Aber diese von dir gewünschte Ausgabe erreichst du damit nicht:
Zitat: | | Ist SuchErgebnisDWG = Suchwert dann schreibe in die *.txt
Bei folgenden Dateien gab es eine Übereinstimmung:
xxxxxx
xxxxxx
Ist SuchErgebnisDWG <> Suchwert dann schreibe in die *.txt
Bei folgenden Dateien gab es keine Übereinstimmung:
xxxxxx
xxxxxx
| |
Dazu mußt du die einzelnen Zeilen in 2 Arrays (Übereinstimmung und keine Übereinstimmung) zwischenspeichern, und am Schluß unter Einfügung der Kopfzeile in die Datei schreiben.
mfg
WB | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: Franki | Datum: 01.05.12 00:21 |
| Hallo WB,
Zitat: | |
Damit hast du natürlich ein Ergebnis für diesen einen
Datensatz.
Du kannst auch diesen Teil des Codes für jeden Datensatz
wiederholen,
und hast damit eine vollständige, aber unsortierte Liste.
| |
Das bedeutet aber, dass für jede Datei aus der Schleife eine eigene DB-Abfrage gemacht wird. Das ist garantiert nich sehr performant.
Ich würde eher beides in ein jeweiliges Array, Collection, Grid oder sonst was schreiben und dann unabhängig von der DB vergleichen und dann bei Bedarf zurück schreiben.
Weil theoretisch müsste man das dann ja auch umgekehrt machen, denn es könnten ja Datensätze in der DB sein zu denen es keine Entsprechung in der Dateischleife gibt.
Aber gut, wir wissen ja nicht was genau da gemacht wird bzw. werden soll
Gruß
Frank | |
Re: Datenbankabgleich / Protokolldatei erstellen | | | Autor: Dirk.B | Datum: 01.05.12 19:44 |
| Hallo Franki!
Hallo WB!
Vielen Dank für die Anregungen.
Mir reicht das so im Moment völlig aus.
Wir sind dabei unseren Artikelstamm teilweise zu überarbeiten bzw. anzupassen.
Dabei erstellen wir in AutoCAD Zeichnungsblöcke und legen diese in
Ordnern auf unseren Server ab.
Bei der Abfrage gibt es nur 2 Möglichkeiten, entweder gibt es den Artikel zu
einem Bloch oder nicht.
Wenn nicht, muß dieser Artikel neu angelegt werden.
Gruß
Dirk
VG
Dirk | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|