Aktenzeichen aus VB 6 Programm an Python übergeben

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Koffein-Junkie
User
Beiträge: 6
Registriert: Sonntag 23. Juli 2023, 22:26

Hallo,

ich nutze eine Anwaltssoftware die in VB 6 programmiert ist. Auf das Wesentliche reduziert arbeitet die Software wie folgt:

-Bei Neuanlage einer Akte wird ein Aktenzeichen vergeben,
-ein Windowsordner wird im Verzeichnis angelegt,
-über die GUI kann ich Daten wie Name, Postanschrift ... eingeben, die dann in einer SQL-Datenbank gespeichert werden.

Das Besondere ist, dass ich in diesem Programm selbst geschriebene Programme als .exe eintragen kann und in der GUI gibt es dann einen Button zum starten des Programms. Ich kann also meine Python-Anwendung direkt aus der Anwaltssoftware-GUI aufrufen.

https://www.a-jur.de/zubehoer.htm

Ich habe bisher beim Erstgespräch handschriftliche Notizen angefertigt. Mit dem Qt Designer hab ich jetzt ein kleines Programm geschrieben, mit dem ich die Notizen direkt im Laptop eingebe und dann in der SQL-Datenbank speichere.

Jetzt zu meiner Frage: Die Notizen müssen natürlich zur richtigen Akte gespeichert werden. Dazu muss die Anwaltssoftware das Aktenzeichen an die Python-Anwendung übergeben. Den VB 6 Code schreibe ich unten hin. Aber wie geht das in Python?

Hier viewtopic.php?t=5966 hab ich gelesen, dass es wohl mit "optparse" funktioniert? Aber ich kann in der Anwaltssoftware keinen Befehl "shell" aufrufen. Auf den dortigen Code hab ich keinen Zugriff.

Ich hoffe, dass mir "optparse" erspart, den ganzen untenstehenden Code von VB 6 zu Python umzuschreiben.

Code: Alles auswählen

Imports Reg = Microsoft.Win32.Registry
Imports System.Data.SqlClient
Imports fio = Microsoft.VisualBasic.FileIO.FileSystem
Imports System.Deployment.Application

Public Class frmdemo
    Public Const HCU As String = "HKEY_CURRENT_USER\"
    Public Const ajk As String = "a-jur-Kanzleisoftware"
    Friend sGapKey As String = "SOFTWARE\" & ajk
    Friend sZoomKey As String = sGapKey & "\Zoom"
    Friend sOptionenKey As String = sGapKey & "\optionen"
    Friend sFavoritenKey As String = sGapKey & "\favoriten"
    Friend sFavoriten2Key As String = sGapKey & "\favoriten2"
    Friend sAutostartKey As String = sGapKey & "\autostart"
    Friend sDatenbankenKey As String = sGapKey & "\datenbanken"
    Friend sDatabaseKey As String
    Dim NetAdoCnnStr As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Datenpool As String
        Datenpool = Reg.GetValue(HCU & sDatenbankenKey, vbNullChar, String.Empty)
        If Datenpool Is Nothing Or Datenpool = String.Empty Then
            MsgBox("Es ist keine frühere Verbindung angegeben.", MsgBoxStyle.Critical)
            Exit Sub
        End If

        Dim rk As Microsoft.Win32.RegistryKey = Reg.CurrentUser.OpenSubKey(sDatenbankenKey & "\" & Datenpool & "\Verbindung")
        If rk Is Nothing Then
            MsgBox("Keine Verbindungsparameter gefunden.", MsgBoxStyle.Critical)
            Exit Sub
        End If
        Dim cnnNet As New SqlConnectionStringBuilder
        Dim wert As String
        For Each valueName As String In rk.GetValueNames
            wert = rk.GetValue(valueName).ToString
            Select Case valueName
                Case "Data Source", "Integrated Security", "Initial Catalog", "User Id", "Password"
                    cnnNet.Add(valueName, wert)
            End Select
        Next
        NetAdoCnnStr = cnnNet.ToString
        rk.Close()
        Dim cnn = New SqlConnection(NetAdoCnnStr)
        Try
            cnn.Open()
        Catch ex As SqlException
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Verbindung zu " & Datenpool)
            Exit Sub
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Verbindung zu " & Datenpool)
            Exit Sub
        End Try
        cnn.Close()
        sDatabaseKey = sDatenbankenKey & "\" & Datenpool

        Dim Parameter As Array = (Environment.CommandLine & ",,,,").Split(",")
        Dim Az As String = Parameter(1).trim
        Dim AdressId As Long = Val(Parameter(2))
        Dim Abi As Long = Val(Parameter(3))

        '        Az = "5555/55"
        '        AdressId = 16
        '        Abi = 1

        Me.lblAz.Text = Az
        Me.lblAdressId.Text = AdressId.ToString
        Me.lblAbi.Text = Abi.ToString

        Dim ada As New SqlDataAdapter("SELECT * FROM akten WHERE aktenzeichen='" & Az & "'", cnn)
        Dim dt As New DataTable
        cnn.Open()
        ada.Fill(dt)
        If dt.Rows.Count > 0 Then
            Me.lblAktenbezeichnung.Text = dt.Rows(0).Item("Kurzrubrum")
        End If
        cnn.Close()

        ada = New SqlDataAdapter("SELECT * FROM adressen WHERE id=" & AdressId, cnn)
        dt = New DataTable
        cnn.Open()
        ada.Fill(dt)
        If dt.Rows.Count > 0 Then
            Me.lblVollername.Text = dt.Rows(0).Item("Vollername")
        End If
        cnn.Close()

        ada = New SqlDataAdapter("SELECT * FROM aktenbeteiligte WHERE id=" & Abi, cnn)
        dt = New DataTable
        cnn.Open()
        ada.Fill(dt)
        If dt.Rows.Count > 0 Then
            Me.lblBetreff.Text = dt.Rows(0).Item("betreff")
        End If
        cnn.Close()

        ada.Dispose()
        dt.Dispose()
    End Sub

    Private Sub cmdClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClose.Click
        Application.Exit()
    End Sub
End Class
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`optarse` kannst Du Dir sparen weil da ja offensichtlich nur *ein* Argument übergeben wird, das durch Kommas getrennte Werte enthält. Also einfach in `sys.argv` schauen und mit der `split()`-Methode an den Kommas auftrennen. Genau wie in dem VB6-Beispiel.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Koffein-Junkie
User
Beiträge: 6
Registriert: Sonntag 23. Juli 2023, 22:26

Danke für die schnelle Antwort. Werde das mal ausprobieren.
nezzcarth
User
Beiträge: 1636
Registriert: Samstag 16. April 2011, 12:47

Unabhängig von dem, was __blackjack__ meinte, optparse auch generell bitte wieder vergessen, das ist veraltet. Stattdessen argparse merken: https://docs.python.org/3/library/argparse.html
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nezzcarth: Oder `click` was allerdings auf `optparse` aufsetzt. Hauptsache nicht `getopt`. 🤓
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten