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
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!
Besten Dank!!
War alles richtig, nur hatte ich Winsock nicht "angehakt"
Manchmal sieht man den Wald vor lauter Bäumen nicht.
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).
Ich habe das FMS Telegramm noch etwas aufgeteilt, so dass der BOS Kenner, Landeskenner, Ortskenner und der Rufname jeweils in einem Feld stehen:
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.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
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)
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.
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
Moin.
Hast du das ActiveX Steuerelement im Formular eingebaut und es auch den Namen "Winsock1" gegeben?
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
Müsste eigentlich gehen.
Wie gibst du denn Eingang(*) aus?
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?
Gibts da auch ne Möglichkeit für Leute die keine ahnung von sowas haben das tool / etc zu nutzen???
MfG PGroby
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 in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)