Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 16 bis 30 von 54

Thema: Übergabe an Access

  1. #16
    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!

  2. #17
    inselhopper Gast
    Besten Dank!!

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


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

  3. #18
    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).

  4. #19
    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)

  5. #20
    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.

  6. #21
    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

  7. #22
    inselhopper Gast
    Moin.

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

  8. #23
    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

  9. #24
    inselhopper Gast
    Müsste eigentlich gehen.

    Wie gibst du denn Eingang(*) aus?

  10. #25
    Registriert seit
    17.11.2005
    Beiträge
    23
    hab es einfach nur mal zum test in einer MsgBox ausgegeben.

  11. #26
    inselhopper Gast
    poste mal den genauen Code

  12. #27
    Registriert seit
    17.11.2005
    Beiträge
    23
    Also so funktioniert es:

    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

    MsgBox Eingang(0)

    End Sub


    Ich bekomme z.B. bei einem Status ein Fenster geöfnet mit dem Inhalt "FMSTlg"

    --------------------------------------------------------------------------------------
    So funktioniert es nicht:
    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

    MsgBox Eingang(1)

    End Sub


    Also mit "Eingang(1) bekomme ich schon eine Fehlermeldung wenn ich das "Programm" starte.

    Eigentlich könnte es doch nur ein Fehler beim Spliten sein oder???
    Bin was sowas angeht auch nicht so der Experte... bin halt nur son bischen am üben.
    Mein Ziel ist es ein kleines Programm zu schreiben das mir die Alarmierungen(5-Ton), Status und die FMS Leitstellentexte in eine MySql Datenbank schreibt.
    Also im prinzip fast so etwas wie das Programm das man hier in diesem Thread schon runterladen kann.

    Mfg

  13. #28
    inselhopper Gast
    Hmm. Warum nimmst du denn das Prog nicht was es hier im Thema als Download gibt? Es funktioniert! Nur halt noch nicht mit 5 Ton Alarmierung (kommt sicher noch)

    Aber trotz alledem müsste es klappen. Ein Fehler im Split ist es nicht, da ich genau so das Telegramm aufschlüssel.

    Was zeigt der denn an wenn der Debugger läuft und du mit dem Cursor über Eingang(1) gehst?

  14. #29
    Registriert seit
    16.03.2002
    Beiträge
    110
    Hallo,

    Du hast geschrieben, dass Du Winsock über "Projekt>>Komponenten eingefügt hast.
    Das läst vermuten, dass Du nicht mit Access sondern mit VB 6 arbeitest.

    Dann musst Du bei

    Eingang() = Split(Eingangstext, Chr$(9))

    das Klammerpaar hinter Eingang weglassen, also

    Eingang = Split(Eingangstext, Chr$(9))

    Bei

    Dim Eingang() As String

    muss es aber stehen bleiben!

    Gruss Ralf

  15. #30
    Registriert seit
    17.11.2005
    Beiträge
    23
    Hallo,

    Ja ich benutze VisualBasic 6.
    Leider funktioniert es auch nicht wenn ich das Klammernpaar wegnehme.

    Es könnte eig auch wie gesagt nur daran liegen also beim Spliten muss da irgendwas schief gehen...

    Wenn ich z.B die Variable "Eingangstext" ausgebe, bekomme ich ja gleich als ersten von FMS32 den Text:

    #Verbindung zu FMS32-Server erfolgreich hergestellt!
    #Verbunden mit Anschluss: 1
    AN1

    Mit der Variable "Eingang(0)" bekomme ich jetzt den Inhalt "#Verbindung", mit der Eingang(1) bekomme ich "zu", usw...

    Wenn jetzt allerdings ein richtiger Status kommt, bekomme ich die Fehlermeldung:
    Laufzeitfehler 9:
    Index liegt außerhalb des gültigen Bereich.

    Woran könnte es noch liegen?

    Gruß Christian

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
  •