Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 54

Thema: Übergabe an Access

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    inselhopper Gast
    Moin,
    ich hab mich mal selbst an der ACCESS Geschichte versucht, habs aber leider nicht hinbekommen.

    Zitat Zitat von Ralf Beitrag anzeigen
    FMS32 im Server-Modus betreiben und in Access ein kleines VBA-Programm schreiben, das die Telegramme mit "WinSock" ausliest und in eine Tabelle schreibt. Das Telegrammformat ist im Web bei Heirue-Soft beschrieben.
    Kann es sein dass der WinSock nicht unter VBA funktioniert, sondern nur unter VB?

  2. #2
    Registriert seit
    16.03.2002
    Beiträge
    110
    Hallo,

    ein Formular erstellen und ein Winsock-Steuerelement einfügen mit Namen "Winsock1"

    Private Sub Form_Load()
    Dim ServerIP As String
    ServerIP = "Hier kommt der Name des Computers im Netz rein, auf dem FMS32 läuft"
    Winsock1.Connect ServerIP, 9300
    End Sub

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim Eingangstext As String
    Winsock1.GetData Eingangstext 'Die Variable "Eingangstext" enthält jetzt das Telegramm

    Dim Eingang() As String
    Eingang() = Split(Eingangstext, Chr$(9))
    'Die Variablen "Eingang(0)", "Eingang(1), "Eingang (...)" enthalten jetzt die einzelnen Felder

    'Quittungen überspringen, wenn gewünscht
    If Eingang(0) = "FMSTlg" Then
    If Eingang(6) = "14" Or Eingang(6) = "15" Then
    Exit Sub
    End If
    End If

    'Jetzt werden die Felder in die Tabelle "Eingangstabelle" mit den Feldern

    Eingangsdatum
    Art
    Richtung
    Adresse
    Status
    Eingangsmeldung

    schreiben

    Set FMS = CurrentDb.OpenRecordset("Eingangstabelle")
    FMS.AddNew

    If Eingang(0) = "ZVEI" Then
    FMS!Eingangsdatum = Now()
    FMS!Art = "Z"
    FMS!Richtung = "an"
    FMS!Adresse = Eingang(1)
    End If

    If Eingang(0) = "FMSTlg" Then
    FMS!Eingangsdatum = Now()
    FMS!Art = Eingang(9)
    FMS!Adresse = Eingang(1)
    If Eingang(8) = "0" Then
    FMS!Richtung = "von"
    Else
    FMS!Richtung = "an"
    End If
    FMS!Status = Eingang(6)
    FMS!Eingangsmeldung = Eingang(13)
    End If

    FMS.Update
    FMS.Close
    Set FMS = Nothing

    End Sub

    POCSAC habe ich nicht berücksichtigt, das haben wir hier nicht, lässt sich aber leicht
    einfügen.

    Viel Erfolg beim Ausprobieren, bei weiteren Fragen gerne melden.

    Gruß Ralf

  3. #3
    inselhopper Gast
    Hallo Ralf,
    danke für deinen Beitrag.

    Das ist soweit alles verständlich und gut beschrieben. Aber eins habe ich noch

    Zitat Zitat von Ralf Beitrag anzeigen
    ...
    ein Formular erstellen und ein Winsock-Steuerelement einfügen mit Namen "Winsock1"
    ...
    Ich hab mir dafür die VB6Runtimedateien runtergeladen, das Steuerelement erscheint auch bei Access, nur ..... ich kann es nicht benutzen. Woran kann das liegen?

  4. #4
    Registriert seit
    16.03.2002
    Beiträge
    110
    Hallo Inselhopper,

    ich vermute mal, dass der Verweis auf Winsock nicht gesetzt ist:

    Im Menü "Extras - Verweise"
    Microsoft Winsock Control 6.0 (SP6) anhaken

    Vorschlag zur Verbindungskontrolle:

    Im Formular ein Bezeichnungsfeld mit dem Namen "Verbindung" einfügen
    und folgenden Code:

    Private Sub Winsock1_Close()
    Verbindung.Caption = "- getrennt -"
    Verbindung.BackColor = RGB(255, 0, 0)
    End Sub

    Private Sub Winsock1_Connect()
    Verbindung.Caption = "- verbunden -"
    Verbindung.BackColor = RGB(0, 255, 0)
    End Sub

    Nun sollte es klappen. Das in FMS32 Server-Modus und Port 9300
    gesetzt sind, davon gehe ich mal aus.

    Viel Erfolg und Grüße
    Ralf

    PS.
    Für die Datenspeicherung muß der Verweis "Microsoft DAO 3.6 Object Library"
    gesetzt sein!

  5. #5
    inselhopper Gast
    Besten Dank!!

    War alles richtig, nur hatte ich Winsock nicht "angehakt"


    Manchmal sieht man den Wald vor lauter Bäumen nicht.

  6. #6
    Registriert seit
    16.03.2002
    Beiträge
    110
    Hallo,

    wenn man nun die Einsatzmeldungen in Access hat, stellt man betrübt fest, das die
    mühsam in FMS32 eingepflegten ZVEI- und Fahrzeugdaten nicht übertragen werden.

    Also eine Tabelle "Fahrzeuge" mit den Feldern "Kennung", "Rufname" und "Bezeichnung"
    anlegen und folgenden Code ausführen:

    Dim Dateiname As String
    Dim Dateilaenge As Long
    Dim Satzlaenge As Long
    Dim Saetzeanzahl As Long
    Dim Dateiposition As Long
    Dim Zaehler As Long
    Dim Eingang As String
    Dim FMS As DAO.Recordset

    Dateiname = "C:\Programme\Heirue-Soft\FMS32-Pro\Fahrzeug.dat"
    Satzlaenge = 515
    Dateiposition = 1

    Set FMS = CurrentDb.OpenRecordset("Fahrzeuge")

    Open Dateiname For Binary As 1
    Dateilaenge = LOF(1)
    Saetzeanzahl = Dateilaenge / Satzlaenge

    For Zaehler = 1 To Saetzeanzahl
    Eingang = String(Satzlaenge, " ")
    Get 1, Dateiposition, Eingang
    Dateiposition = Dateiposition + Satzlaenge
    FMS.AddNew
    FMS!Kennung = Left$(Eingang, 8)
    FMS!Rufname = Mid$(Eingang, 9, 30)
    FMS!Bezeichnung = Mid$(Eingang, 39, 40)
    FMS.Update
    Next Zaehler

    Close 1
    FMS.Close
    Set FMS = Nothing

    Und eine Tabelle "Ton5" mit den Feldern "Tonfolge" und "Klartext"

    Dim Dateiname As String
    Dim Dateilaenge As Long
    Dim Satzlaenge As Long
    Dim Saetzeanzahl As Long
    Dim Dateiposition As Long
    Dim Zaehler As Long
    Dim Eingang As String
    Dim FMS As DAO.Recordset

    Dateiname = "C:\Programme\Heirue-Soft\FMS32-Pro\TON5.dat"
    Satzlaenge = 323
    Dateiposition = 1

    Set FMS = CurrentDb.OpenRecordset("Ton5")

    Open Dateiname For Binary As 1
    Dateilaenge = LOF(1)
    Saetzeanzahl = Dateilaenge / Satzlaenge

    For Zaehler = 1 To Saetzeanzahl
    Eingang = String(Satzlaenge, " ")
    Get 1, Dateiposition, Eingang
    Dateiposition = Dateiposition + Satzlaenge
    If Left$(Eingang, 1) < "9" Then
    FMS.AddNew
    FMS!Tonfolge = Left$(Eingang, 5)
    FMS!Klartext = Mid$(Eingang, 6, 44)
    FMS.Update
    End If
    Next Zaehler

    Close 1
    FMS.Close
    Set FMS = Nothing

    Die Originaldaten vorher sichern!!!

    Jetzt die Tabellen verknüpfen und mit einer Abfrage in einem
    Formular anzeigen.

    Gruß Ralf

    PS.

    Heirue-Soft hatte vor Jahren eine Access-Version von FMS32 projektiert.
    Es gab auch eine funktionsfähige Demo-Version. Wurde aber nicht zu Ende
    gebracht, obwohl sich viele Anwender das gewünscht hatten. Herr Jahn
    befürchtete mangelnde Performance (bei den damaligen PC's und der
    damaligen AccessVersion sicher richtig).

  7. #7
    inselhopper Gast
    Ich habe das FMS Telegramm noch etwas aufgeteilt, so dass der BOS Kenner, Landeskenner, Ortskenner und der Rufname jeweils in einem Feld stehen:

    FMS.AddNew
    If Eingang(0) = "FMSTlg" Then
    FMS!Eingangsdatum = Now()
    FMS!BOS = left(Eingang(1), 1)
    FMS!Land = Mid(Eingang(1), 2, 1)
    FMS!ort = Mid(Eingang(1), 3, 2)
    FMS!Fahrzeug = Right(Eingang(1), 4)
    If Eingang(8) = "0" Then
    FMS!Richtung = "von"
    Else
    FMS!Richtung = "an"
    End If
    Desweiteren habe ich mir überlegt dass es doch toll wäre, wenn man anstatt des BOS-Kenners "6" den Text "Florian" oder "FF" in der Tabelle stehen hat. Dafür habe ich eine andere Tabelle erstellt mit den Spalten "Kenner" und "BOS", welche die gesamten BOS-Kenner mit dem dazugehörigen Text enthält.
    Das gleiche habe ich mit dem Ortskenner(Landkreiskenner) gemacht.

    FMS.AddNew
    If Eingang(0) = "FMSTlg" Then
    FMS!Eingangsdatum = Now()
    BOS = Left(Eingang(1), 1)
    ort = Left(Eingang(1), 4)
    FMS!BOS = DLookup("feld_BOS_in_tabelle_bos-kenn", "tabelle_bos-kenn", "Kenner ='" & BOS & "'")
    FMS!Land = Mid(Eingang(1), 2, 1)
    FMS!ort = DLookup("feld_ort_in_tabelle_ort", "tabelle_ort", "Kenner ='" & ort & "'")
    FMS!Fahrzeug = Right(Eingang(1), 4)
    If Eingang(8) = "0" Then
    FMS!Richtung = "von"
    Else
    FMS!Richtung = "an"
    End If
    FMS!Status = Eingang(6)

  8. #8
    Registriert seit
    16.03.2002
    Beiträge
    110
    Hallo,

    wenn das Datentelegram ein FMS-Telegramm enthält, würde ich dieses auch noch
    mit SPLIT in einzelne Felder zerlegen und wegschreiben. Ist leichter lesbar.

    Aus dem gewonnenen Ort und Strasse eine URL bauen nach folgendem Muster:

    http://maps.google.de/maps?f=q&hl=de...q=Strasse,+Ort

    und auf Knopfdruck den Einsatzort in der Karte sehen! ! !

    Wenn das Telegramm Geodaten (TRN...................) enthält, kann man auch daraus
    eine URL bauen, dass Thema wurde schon hier im Forum behandelt. Auch zum
    Thema Fahrzeugposition wurde hier schon geschrieben.

    Gruss Ralf

    PS. die URL darf keine Umlaute enthalten, also "ü" in "ue" umwandeln oder statt
    "ü" "%3F" einsetzen.

  9. #9
    Registriert seit
    17.11.2005
    Beiträge
    23
    Hallo,

    Wenn ich den Text so in Visual Basic eingebe bekomme ich die Fehlermeldung

    "Fehler beim Kompielieren: Sub oder Function nicht definiert"

    Woran kann das liegen?



    Hier mal mein Code wie ich ihn eingegeben habe:


    Private Sub Form_Load()
    Dim ServerIP As String
    ServerIP = "localhost"
    Winsock1.Connect ServerIP, 9300
    End Sub

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim Eingangstext As String
    Winsock1.GetData Eingangstext 'Die Variable "Eingangstext" enthält jetzt das Telegramm

    Dim Eingang() As String
    Eingang() = Split(Eingangstext, Chr$(9))
    'Die Variablen "Eingang(0)", "Eingang(1), "Eingang (...)" enthalten jetzt die einzelnen Felder

    'Quittungen überspringen, wenn gewünscht
    If Eingang(0) = "FMSTlg" Then
    If Eingang(6) = "14" Or Eingang(6) = "15" Then
    Exit Sub
    End If
    End If

    'Jetzt werden die Felder in die Tabelle "Eingangstabelle" mit den Feldern

    Eingangsdatum
    Art
    Richtung
    Adresse
    Status
    Eingangsmeldung

    schreiben

    Set FMS = CurrentDb.OpenRecordset("Eingangstabelle")
    FMS.AddNew

    If Eingang(0) = "ZVEI" Then
    FMS!Eingangsdatum = Now()
    FMS!Art = "Z"
    FMS!Richtung = "an"
    FMS!Adresse = Eingang(1)
    End If

    If Eingang(0) = "FMSTlg" Then
    FMS!Eingangsdatum = Now()
    FMS!Art = Eingang(9)
    FMS!Adresse = Eingang(1)
    If Eingang(8) = "0" Then
    FMS!Richtung = "von"
    Else
    FMS!Richtung = "an"
    End If
    FMS!Status = Eingang(6)
    FMS!Eingangsmeldung = Eingang(13)
    End If

    FMS.Update
    FMS.Close
    Set FMS = Nothing


    End Sub


    MFG
    Christian

  10. #10
    inselhopper Gast
    Moin.

    Hast du das ActiveX Steuerelement im Formular eingebaut und es auch den Namen "Winsock1" gegeben?

  11. #11
    Registriert seit
    17.11.2005
    Beiträge
    23
    also ich habe über Projekt>>Komponenten das Microsoft Winsock Control eingefügt.
    Das funktioniert soweit auch ganz gut.
    Wenn ich den Code mal nur so weit eingebe...

    Private Sub Form_Load()
    Dim ServerIP As String
    ServerIP = "localhost"
    Winsock1.Connect ServerIP, 9300
    End Sub

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim Eingangstext As String
    Winsock1.GetData Eingangstext 'Die Variable "Eingangstext" enthält jetzt das Telegramm

    Dim Eingang() As String
    Eingang() = Split(Eingangstext, Chr$(9))
    'Die Variablen "Eingang(0)", "Eingang(1), "Eingang (...)" enthalten jetzt die einzelnen Felder

    End Sub



    ...kann ich die Variable "Eingangstext" ausgeben und erhallte das komplette Telegramm.

    Mit dieser Split Funktion funktioniert es nur leider nicht...
    Ick kann z.B. Die Variable "Eingang(0)" ausgeben und bekomme die Art des Telegramm also z.b. "FMSTlg".
    Mit der Variable "Eingang(1) funktioniert es nicht.
    Ich bekomme die Fehlermeldung "Index auserhalb des Gültigen Bereich"

    Hab ich Irgendetwas falsch gemacht oder vergessen?

    Mfg

  12. #12
    inselhopper Gast
    Müsste eigentlich gehen.

    Wie gibst du denn Eingang(*) aus?

  13. #13
    inselhopper Gast
    Zitat Zitat von inselhopper Beitrag anzeigen
    Hallo Ralf,
    danke für deinen Beitrag.

    Das ist soweit alles verständlich und gut beschrieben. Aber eins habe ich noch



    Ich hab mir dafür die VB6Runtimedateien runtergeladen, das Steuerelement erscheint auch bei Access, nur ..... ich kann es nicht benutzen. Woran kann das liegen?
    Das Thema ist ja schon etwas älter und ich habe seit dem auch nicht mehr viel gearbeitet. Deshalb hab ich nun auch keine Ahnung wieso es nicht funktioniert. Ich habe trotz angehaktem Winsock Steuerelements einen Laufzeitfehler 438. Anscheinend kennt er den Winsock Befehl nicht.

    Woran kann es liegen?

  14. #14
    Registriert seit
    17.12.2008
    Beiträge
    53
    Gibts da auch ne Möglichkeit für Leute die keine ahnung von sowas haben das tool / etc zu nutzen???

    MfG PGroby

  15. #15
    Registriert seit
    07.09.2006
    Beiträge
    62
    Sorry, auch wenn ich jetzt ein altes Thema wieder ausgrabe, aber kann mir mal jemand einen fertigen Quelltext geben und mir dazusagen welche elemente ich dafür brauche...? Dann würde ich mir das selber zurechtbasteln, aber so bin ich ein wenig verwirrt.... Wäre nett. Danke

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •