Programm für Frachtkostenberechnung

  • Hi,

    ich möchte ein Programm schreiben, welches ausgehend von einem festen Standort die KM zu einem ausgewählten Standort (inkl Mautstellen etc) die Frachtkosten berechnet.
    1. Frage: Kann ich eine Liste (hab ich )mit allen PLZ und dazugehörigen Orten abspeichern und mit AutoIT daraufzugreifen. Das Programm soll später selbständig laufen. Also keine sonstige DInge wie SQL benötigen.

    Grüße und Frohe Weihnachten

  • du hast jetzt die liste oder?
    und wie genau willst du das berechnen?
    ich kenne deine AutoIt-Kenntnisse nicht aber das ganze Projekt hört sich sehr ergeizig an^^

    Padmak

    Edit: Ach so stehen alle Werte in der Liste?
    wenn du die liste als .txt oder irgendein anderer Dateityp (FileRead, -Open, -Write usw gehen bei allen dateitypen :D) speicherst dürfte es kein problem geben

  • und du könntst schon SQLite verwenden ;) da musst du nur die DLL mitgeben... Die UDFs sind auch schon in der deutschen Hilfe drin und bei AutoIt dabei.

  • Ladungsverkehr oder Sammelladung, von wegen anteillige Maut etc.
    Da hast Du Dir jedenfalls was vorgenommen,
    besonders wenn du die Datenmengen hinterher der TC Abrechnungsdatei gegenüberstellen willst.
    Ohne SQl würde ich da nix machen das wird im Laufe der Zeit sicher wohl recht unübersichtlich und laaaangsaam

    Einfach gesagt: Du möchtest also etwas basteln was die Orte in ein Programm zum kalkulieren schickt und die Werte zurückschreibt...

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Danke für die Tips!
    Wie krieg ich das hin das ich ne Combo - Auswahl Box hinbekomme in der alle PLZ + Ort angegeben werden..
    Kann ich in der Combo auch ne andere Datei in der die Liste vorhanden ist anzeigen lassen?

    Frohes Neues noch

  • hey ho,

    soweit so gut. Das grobe Programm steht. Hab jetzt nur ein Problem: Ich möchte gerne, dass ich in einem Combo alle PLZ + Ort aufgelistet bekomme und zwar UNTEREINANDER. An und für sich hab ich das zu 90% nur leider werden mir die Ortschaften und PLZ nebeneinander in einer Zeile gezeigt....blöd.

    Außerdem hätte ich noch gerne eine Suchfunktion in der ich entweder nach PLZ oder Ort suchen kann. Das klappt aber auch nicht so ganz. So damit ihr euch darunter auch was vorstellen könnt hier der Source Code:

    Hier wird die DB erstellt:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Daten einpflegen
    $strINSERT = _
    "INSERT INTO kosten_km VALUES (2, '77652', 'Offenburg', '01', '15');" & _
    (5, '77797', 'Berghaupten', '01', '9');" & _
    "INSERT INTO kosten_km VALUES (7, '73432', 'Aalen', '05', '229');"
    If _SQLite_Exec ( $hSQL, $strINSERT) <> $SQLITE_OK Then ; wenn Fehler
    _Beenden('Fehler INSERT')
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Hier werden sie ausgelesen:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Daten auslesen
    _SQlite_Query ($hSQL, "SELECT * FROM kosten_km;", $hQuery) ; the query
    While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
    $sMsg &= $aRow[1] & $aRow[2]
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Hier soll die Combo erstellt werden die die Variable &sMsg als Inhalt hat. (hat sie ja auch aber eben das Format ist scheisse)
    Und wenn wir grad dabei sind: Kann mir jmd die Funktion von dem & bei §$sMsg &= $aRow..." erklären.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Wählen Sie Ihr Zielort", 24, 120, 170, 17)
    $PLZ_comb = GUICtrlCreateCombo ("Ort", 200, 120, 200)
    GUICtrlSetData(-1,$sMsg,"Ort")

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    So das war die Auflistung. Jetzt zur Suchfunktion.

    Suchfeld und eine Funktion die die DB Abfragen nach $input Abfragen soll

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    $Button3 = GUICtrlCreateButton("Suchen", 24, 150, 70, 17)
    $input = GUICtrlCreateInput("", 200, 150, 170, 17)

    [/autoit] [autoit][/autoit] [autoit]

    Func Suchen()
    GUICtrlSetState($input, $GUI_FOCUS)
    _SQlite_Query ($hSQL, "SELECT * FROM kosten_km WHERE ort = '$input' ORDER BY 'a';", $hQuery) ;WHERE ... stimmt nicht ganz ich weiß, wollte nur deutlich machen was ich versuche
    While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
    $sMsg = $aRow[0]
    WEnd
    MsgBox(0,"SQLite","Get Data using a Query : " & $sMsg )
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    So ich hoffe ich konnte verständlich machen was mein Problem ist. Hoffe ihr könnt mir helfen. Danke.

    Grüße

  • Hi, noch ne Frage:

    Ist in den Sqlite - Includes angegeben wie groß eine DB sein darf oder ist das von sqlite schon vorgegeben?! Wie ihr euch vll denken könnt, sind es ne Menge PLZ + Ortschaften. Leider bricht mir das Erstellen der DB jedes mal bei id 57 ab... :cursing:
    Hab Syntaxfehler ausgeschlossen!!

    Grüße

    • Offizieller Beitrag

    wie groß eine DB sein darf

    Also einige Tausend Einträge verkraftet die Datenbank ohne zu zucken ;-).
    Und je mehr Daten du in einem Execute bearbeitest, umso schneller ist SQLite.

    Zitat

    Außerdem hätte ich noch gerne eine Suchfunktion in der ich entweder nach PLZ oder Ort suchen kann.

    $sSearch = _
    "SELECT * FROM tabelle WHERE plz = 'suchstring';"
    Analog für Ort.

    Schau mal ins Unterforum Datenbanken, da findest du Bsp. wie du mit DB umgehst.


    Edit:
    Mal zum Beweis, dass SQLite auch große Datenmengen verkraftet :)
    Ein Mustercode, der eine DB mit 1000 Datensätzen erstellt und anschließend in die Console ausgibt. Bitte etwas Geduld haben, die Feldinhalte werden per Zufall generiert - das dauert schon ein wenig... :D

    Spoiler anzeigen
    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $sSQliteDll_Path = _SQLite_Startup()
    $hSQL = _SQLite_Open(@ScriptDir & '\big_test.db')
    $strCREATE = _
    "CREATE TABLE [Musik] (" & _
    "[id] INTEGER PRIMARY KEY NOT NULL," & _
    "[titel] VARCHAR[50] NULL," & _
    "[interpret] VARCHAR[50] NULL," & _
    "[genre] VARCHAR[30] NULL)"
    If _SQLite_Exec ( $hSQL, $strCREATE ) <> $SQLITE_OK Then ; wenn Fehler
    _Beenden('Fehler CREATE')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $aInsert[1000]
    For $i = 0 To UBound($aInsert) -1
    $aInsert[$i] = $i+1 & ',' & _GetRandomStr(20) & ',' & _GetRandomStr(20) & ',' & _GetRandomStr(10)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetRandomStr($len)
    Local $str = ''
    For $i = 1 To $len
    $str &= Chr(Random(65,90,1))
    Next
    Return $str
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    If _SQLite_INSERT('Musik', $aInsert) <> $SQLITE_OK Then _Beenden('Fehler INSERT')

    [/autoit] [autoit][/autoit] [autoit]

    ; Tabelleninhalt in Console ausgeben
    If $SQLITE_OK <> _SQLite_Exec($hSQL, "SELECT * FROM Musik", "_cb" ) Then
    MsgBox(0,"SQLite Error","Error Code: " & _SQLite_ErrCode() & @CR & "Error Message: " & _SQLite_ErrMsg())
    _SQLite_Close() ; schließt die Datenbank
    _SQLite_Shutdown()
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _Beenden('Test Ende')

    [/autoit] [autoit][/autoit] [autoit]

    Func _Beenden($MSG)
    _SQLite_Close()
    _SQLite_Shutdown()
    Exit MsgBox(0, 'Ende', $MSG)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _cb($aRow)
    For $s In $aRow
    ConsoleWrite($s & @TAB)
    Next
    ConsoleWrite(@LF)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _SQLite_INSERT($sTable, $saValues, $Delim=',')
    Local $sInsert = ''
    If Not IsArray($saValues) Then
    Local $aValues[1] = [$saValues]
    Else
    Local $aValues = $saValues
    EndIf
    For $i = 0 To UBound($aValues) -1
    Local $splitVal = StringSplit($aValues[$i], $Delim)
    $sInsert &= "INSERT INTO " & $sTable & " VALUES ("
    For $k = 1 To UBound($splitVal) -1
    $sInsert &= "'" & StringStripWS($splitVal[$k], 3) & "'" & ','
    Next
    $sInsert = StringTrimRight($sInsert, 1) & ");"
    Next
    If $SQLITE_OK <> _SQLite_Exec ( -1, $sInsert ) Then
    Return SetError(1,0,1)
    Else
    Return $SQLITE_OK
    EndIf
    EndFunc

    [/autoit]