vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
Datenbankabgleich / 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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbankabgleich / Protokolldatei erstellen 
Autor: wb-soft
Datum: 26.04.12 21:21

Hi!

Un wie lautet jetzt die Frage?


mfg

WB
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel