"Konvertierung" eines Projekts von VB in PB

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Bin doch etwas früher am Start, da mir eine Kommillitone nach Schilderung meines Datenbankproblems erklärt hat, dass die Konvertierung in das Textformat dem CSV Format entspräche. Man müsse halt nur das Ersteller- und das Empfängerprogramm, also Access und SQLite-Manager oder TKSQlite, synchronisieren, d.h. bei beiden festlegen welche Feldtrennzeichen (, ;, Space etc.) verwendet werden, wie die Texttrennzeichen aussehen sollen und ob die Feldnamen in der ersten Zeile mit in den Text integriert werden sollen und abschließend müsse die von Access vorgeschlagene Dateiendung ".txt" auf ".csv" ändern. Nachdem ich das wusste, musste ich doch erst mal nach Hause und das Ganze testen und siehe da, es klappt. Also doch dein Skript nicht gebraucht, aber wie gesagt trotzdem danke. Wenn also nochmal jemand mit gleich gelagerter Frage an dich herantritt, Kiffi, dann kannst du ihm oder ihr ja dieses Posting hier zeigen.

Was aber immer noch problematisch ist, aber aus Zeitgründen von mir auf die Endphase meines Projekts verlegt wird, ist der Umstand, dass ich mittlerweile doch weit mehr als 100 Tabellen habe, jede steht ja quasi für eine Lektion bzw. Lerneinheit. Ich kann jetzt zwar ne einzelne Tabelle von Access in SQLite konvertieren, das dauert aber jeweils 5 Minuten. Bei ca. 200 Tabellen, die ich bis zum Examen haben werde, sind das dann 16 1/6 Stunden reine Konvertierungszeit, mit Pausen also mehr als 2 Tage a 8 Stunden nur konvertieren. Das würd ich selbst nicht aushalten, wenn ich dabei unentwegt saufen könnte und mir 5 bildhübsche Studentinnen abwechselnd ihre neueste Dessous-Mode vorführen würden.

Also werde ich vorerst mit ner SQLite Datenbank arbeiten, diese auf 3 Tabellen begrenzen, und in der Endphase des Projekts tatsächlich jemanden beauftragen evtl. gegen ein Entgelt die Konvertierung zu übernehmen oder bis dahin schon auf ein Programm gestoßen sein, das mir diese Mordsarbeit abnimmt.

Bis dahin, danke ich allen, die mich mit Tipps und Ratschlägen schonmal soweit gebracht haben, dass mein erstes Problem beseitigt ist.
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

ok, neuer Versuch.

Nachfolgender Code konvertiert die in einer Access-MDB vorhandenen
und im Code eingetragenen Tabellen in eine SQLite-Datenbank (bitte
Kommentare lesen!)

Code: Alles auswählen

EnableExplicit

UseODBCDatabase()
UseSQLiteDatabase()

Define Feldnamen.s
Define Werte.s
Define Feldzaehler.l
Define Wertzaehler.l

Define MDB.l
Define SDB.l

Define MDB_ODBC.s  = "db3" ; Hier trägst Du Deine ODBC-Verbindung ein
Define SQLite_DB.s = "d:\db3.db" ; Hier trägst Du ein, wo die SQLite-Datenbank erstellt werden soll

NewList Tabellenname.s()

; Nun trägst Du in der LinkedList die Namen der zu exportierenden Tabellen ein:
AddElement(Tabellenname()) : Tabellenname() = "DeineTabelle1"
AddElement(Tabellenname()) : Tabellenname() = "DeineTabelle2"
AddElement(Tabellenname()) : Tabellenname() = "DeineTabelle3"
; [...] und so weiter und so fort

MDB = OpenDatabase(#PB_Any, MDB_ODBC, "", "", #PB_Database_ODBC)

If MDB
  
  If CreateFile(0, SQLite_DB)
    
    CloseFile(0)
    
    SDB = OpenDatabase(#PB_Any, SQLite_DB, "", "", #PB_Database_SQLite)
    
    If SDB
      
      ForEach Tabellenname()
        
        If DatabaseQuery(MDB, "Select * From " + Tabellenname())
          
          ; Create-Table-Statement
          
          Feldnamen = ""
          
          For Feldzaehler = 0 To DatabaseColumns(MDB) - 1
            
            Feldnamen + DatabaseColumnName(MDB, Feldzaehler)
            
            If Feldzaehler < DatabaseColumns(MDB) - 1
              Feldnamen + ","
            EndIf
            
          Next
          
          If DatabaseUpdate(SDB, "Create Table " + Tabellenname() + " (" + Feldnamen + ")") = 0
            Debug "DatabaseError: " + DatabaseError()
          EndIf
          
          ; Insert-Into-Statement
          
          DatabaseUpdate(SDB, "Begin Transaction")
          
          While NextDatabaseRow(MDB)
            
            Werte = ""
            
            For Wertzaehler = 0 To DatabaseColumns(MDB) - 1
              
              Werte + "'" + ReplaceString(GetDatabaseString(MDB, Wertzaehler), "'", "''") + "'"
              
              If Wertzaehler < DatabaseColumns(MDB) - 1
                Werte + ","
              EndIf
              
            Next
            
            If DatabaseUpdate(SDB, "Insert Into " + Tabellenname() + " (" + Feldnamen + ") Values (" + Werte + ")") = 0 
              Debug "DatabaseError: " + DatabaseError()
            EndIf
            
          Wend
          
          DatabaseUpdate(SDB, "Commit")
          
        Else
          
          Debug "!DatabaseQuery"
          Debug DatabaseError()
          
        EndIf
        
      Next
      
      CloseDatabase(SDB)
    
    Else
      
      Debug "!SDB"
      
    EndIf

  Else
    
    Debug "!CreateFile"
    
  EndIf
  
  CloseDatabase(MDB)
  
Else
  
  Debug "!MDB"
  
EndIf
Ich denke, dass es nicht einfacher und schneller funktionieren wird.

Anmerkung: Die Feldtypen werden als grundsätzlich als Text
abgespeichert. Eventuell vorhandene Zahlentypen kannst Du
nachträglich in TKSQLite nachträglich ändern. Aber der Aufwand
wird sich wohl in Grenzen halten (es dauert zumindest nicht 16 1/6
Stunden ;-)).

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Tausend Dank (mal wieder) für den Aufwand, ich kopier mir das Teil, muss aber im Moment erst Mal wieder mehr fürs Studium machen, habs gestern schon schleifen lassen. Werde daher erst mal nichts zur Funktionsfähigkeit sagen können, zumal ich auch erst mal etwas sicherer im Umgang mit PB werden möchte, sodass ich auch verstehe - ich bin nunmal ein neugieriger Mensch :) - was ich da per Einfügefunktion in meinen Purebase-Editor verfrachte.

Wenn es in 2 Wochen richtig mit der Examensvorbereitung losgeht, da hab ich in der Woche maximal 1 Stunde Zeit am Tag zum programmieren, wenn überhaupt! Somit muss ich hochgradig zeiteffizient arbeiten, wenn ich in einem Jahr fertig werden will. Das heisst ich muss, wie es auch Manager (protz!) machen, die anstehenden Arbeiten auf der X-Achse nach A B C (Wichtig - bis unwichtig) und auf der Y - Achse nach 1 2 3 (zeitlich sofort - bis "kann erst mal liegen" bleiben") einsortieren. Und die Konvertierung von Access zu SQLite hat erst mal das Etikett A3 (= Sehr wichtig, kann aber im Moment noch liegen bleiben), da ich ja weiss, wie es funktioniert und auch eine Testdatenbank mit 3 Tabellen hab. Aber sobald der Zeitpunkt kommt, an dem ich mit der richtigen Datenbank arbeiten muss, werd ich dein Skript rauskramen und es einsetzen. Trotzdem zum tausendsten Mal, besten Dank für deine Hilfsbereitschaft.
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Hab mich doch grad nochmal für ein paar Stündchen an die Kiste gesetzt, nein, leider nicht an die mit den 24 klimpernden Zwergen mit der süßen goldenen Krone drauf, sondern an den PC. PB machst schon so’n bisschen süchtig…breche andauernd mit meiner selbstauferlegten Programmierabstinenz…aber mal was anderes - ich hoffe, danach redet noch wer mit mir aber etwas Kritik muss auch einem blutigen Anfänger gestattet sein, auch wenn es beinahe blasphemisch erscheint, dies zu sagen, aber eines nervt an PB bei aller Euphorie doch ein wenig. Für Leute wie ich, die immer nur kurz Zeit haben und schnell nach Lösungen suchen, da fehlt es bei PB einfach an einem wirklichen guten deutschen Nachschlagewerk wie es bei Visual Basic bspw. die Werke von Kofler & Co. sind. Denn hier hab ich das Problem, dass ich bei der Erstellung meines User Interfaces zwar ziemlich schnell kapiert hab, wie das Gadget-Handling hier funktioniert, etwas anders als bei VB, aber deswegen keinesfalls schlechter. Ich dafür aber für Detailfragen, kann ich Buttons einfärben (schon geklärt), oder welches meiner Fenster hat den Fokus etc. ständig zwischen Forum, Tutorial und Hilfe umschalten muss. Ich krieg zwar letztlich die Infos, die ich benötige, aber es kostet zumeist extrem viel Zeit. So ausführlich die Hilfe auch ist, sie ist leider, wie die meisten Hilfedateien INDEXBASIERT angelegt. Mit anderen Worten, wer etwas über das Windows-Messaging finden will, der erhält eine alphabetische Liste, der mit WINDOWS verzahnten Befehle; wer aber gar nicht weiss, welcher Befehl für sein Problem einschlägig ist, dem ist damit nicht geholfen. Zwar kriegt man hier auch blitzschnell und superkompetent Antworten aus dem Forum (siehe Kiffis-Postings) und die Leute sind auch echt bemüht, einem zu helfen, doch das kann doch auch nicht der Weisheit letzter Schluss sein, für jeden Katzenkirmes die Forumsfeuerwehr zu rufen. Auch Tutorials behandeln immer nur einen vom Ersteller gewählten Ausschnitt aus einem Themenkomplex und der wird – es geht ja nicht auch nicht anders – zumeist nicht erschöpfend behandelt, sodass man ausgerüstet mit dem Grundwissen aus dem Tutorial, dann noch mal in der Hilfe stichwortbasiert nach Details recherchieren muss.

Es müsste ein Werk geben, das thematisch UND referenziell aufgebaut ist. Ich hab von amazon bis buch.de überall recherchiert, ich glaub, es gibt nur ein englisches Werk und das trau ich mir ehrlich gesagt mit meinem klapprigen Schulenglisch und dem bisschen Standardvokabular nicht zu. Vielleicht haben ja irgendwann mal ein paar alte Hasen hier Interesse daran, so ein Werk zu schreiben  , ich glaube, das würde die Fangemeinde von PB exorbitant wachsen lassen, weil bestimmt viele Anfänger ein ähnliches Problem haben wie ich. Nee, ich korrigiere: Nicht nur bestimmt, sondern sicher, das merkt man nämlich daran, dass beinahe minütlich neue Fragen im Forum auftauchen, das kenne ich aus anderen Foren nicht. Ich frag mich, warum das noch keiner gemacht hat, es gibt doch mittlerweile so viele PB – Nutzer (= potentielle Käufer)?

Ich werde mir aber trotz dieses kleinen Mankos, PB in der Vollversion zulegen, denn die Sprache ist einfach genial und es macht echt Spaß damit zu programmieren, … wenn man denn weiß, hinter welchem Busch, der richtige Befehl versteckt ist….:)
Wenn die dicke Frau klatscht, ist die Oper zu Ende
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Hallo,

ich stimme dir zu. Das wäre sicherlich toll.
Aber die Frage wie bei fast Allem:
Wer soll es wann machen.

Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Einmal die komplette Hilfe überfliegen und die wichtigsten Funktionen merken.
Dauer: ca. 2 Stunden
Die genaue Schreibweise ist nicht erforderlich, dafür gibts Autocomplete.
Die Parameter sind auch nicht erforderlich, dafür gibts die Info in der Statusbar.
F1 und PureBoard machen den Rest.
> Keine teuren Bücher kaufen müssen (wie bei VB, die mitgelieferten sind Schrott)
> Infos immer aktuell
> .... :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Tmjuk, auch wenns bald hier nen Blog wird, mit meinem ellenlangen Dauerposting...:)...trotzdem noch ne Antwort drauf: Dein Einwand, der sich hinter deiner rhetorischen Frage verbirgt, interpretiere ich so, dass du meinst, dass sich ja nicht viele für so etwas (Zeit-)Aufwendiges erbarmen würden. Da hast du recht, wenn außer Ruhm und Ehre nichts anderes zu ernten wäre (welch toller Reim! ;) ). Anders ist es dagegen, wenn man das Projekt kommerziell angeht und der bzw die Autorin - zu Recht - dafür einen Preis verlangen würden, der bei Werken dieser Art angemessen ist: Zwischen 20 und 40 Euro. Ich denke, dann würd es sich rechnen, aber bis dahin lese ich mich halt noch im FOHITUT schlau (= Forum + Hilfe + Tutorial) und wenns arg brennt, ruf ich die Forumsfeuerwehr...:)
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

TS-Soft, wenn's so einfach wäre. Ich programmier nun auch schon ein Weilchen und weiss, dass die wirklichen Spezialprobleme bekanntlicherweise erst dann auftauchen, wenn du am programmieren bist, die kannst du dir vorher gar nicht anlesen - außer due bist Kassandra und damit Seherin. Ich bring ein - mich wahrscheinlich euren Lachanfällen aussetzendes :) - Beispiel: Ich hab bis jetzt noch nicht rausgefunden, wie man bei 2 geöffneten Fenstern verhindert, dass beim Schließen des 2. Fensters der Eventhandler, der ja nur auf das erste Fenster reagiert, das Ende des Programms einläutet: Das steht nirgends in der Hilfe, ich habs jetzt gelöst, aber wahrscheinlich steinzeitmäßig plump:

Code: Alles auswählen

;   PROGRAMM XXXXXX
;   PB Version 4.2
;   Project Propertiers
;   Main Window 900 x 645

;   [A.]   Includes
IncludePath "K:\VB-Programme\PURE BASIC\QM\Includes"
IncludeFile "DatenbankanbindungSQLite.pb"
IncludeFile "MainGUI.pb" ;hier sind alle Interface-Objekte (Windows, Gadgets, Menus etc. definiert) 

;   [B.]   Konstanten

;   [C.]   Strukturen

;   [D.]   Variablen
;      I.   Globale Variablen
;      II.  Sonstige Variablen
Define iWindowFocus.i


;   [E.]   Prozeduren

;   [F.]   *** MAIN ***

; MainGUI öffnen
open_Startwindow()
iWindowFocus = 1

;   Hauptaktionsschleife

Repeat                                             
	
	lEventID.l = WaitWindowEvent()    
	
	If lEventID = #PB_Event_CloseWindow 
		If iWindowFocus = 1
			Exit = 1
		EndIf
		If iWindowFocus = 2
			CloseWindow(#Window_DBLaden)
			iWindowFocus = 1
		EndIf
	EndIf
	
    ; Hauptmenu abfragen
    If lEventID = #PB_Event_Menu
    	Select EventMenu()
    		Case #MENU_DatenbankLaden
    			Debug "Datenbank soll geladen werden"
    			Open_Window_DBLaden()
    			SetActiveWindow(#Window_DBLaden)
    			iWindowFocus = 2
    		Case #MENU_ProjektNeu
    			Debug "Neues Projekt"
    		Case #MENU_ProjektLetztgenutzt
    			Debug "Letztgenutztes Projekt aufrufen"
    		Case #MENU_ProjektLetzterstellt
    			Debug "Letzterstelltes Projekt aufrufen"
    		Case #MENU_Ende
    			Debug "Programm beenden"
    		Case #MENU_Zeitarchiv
    			Debug "Zeitarchiv aufrufen"
    	EndSelect
    EndIf
    		                  

Until Exit = 1       

End
Es zeigt, nicht jedes Problem ist so schnell zu finden, und ich hab gründlich gesucht, und wenn ich bestimmte Dinge nicht hinkrieg, dann mach ich es halt so, wie ich es von VB gewöhnt bin. Und das Prob ist, dass ich es dann nachher wahrscheinlich umprogrammieren muss. Also fehlt mir so oder so die Zeit, besser wär da ein Buch, das mir durch Nachschlagen von vornherein solchen Kokolores, der es vermutlich ist, aber ich muss schnelltsmöglich mein UI testen, erspart. :)
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          Break
        Case #Window_DBLaden
          CloseWindow(#Window_DBLaden) 
      EndSelect
    Case #PB_Event_Gadget
      Select EventGadget()
        ;
      EndSelect 
    Case #PB_Event_Menu
      Select EventMenu()
      ;
      EndSelect
  EndSelect
ForEver
so simple :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Palandt
Beiträge: 155
Registriert: 18.09.2008 09:33

Beitrag von Palandt »

Dank dir. Und so simple ist es nur für einen, der es schon kennt...aber nett, dass du nur heimlich gelacht hast...:)...aber mal im Ernst, wie habt ihr euch denn euer Wissen angeeignet, auch mit der Try and Cry Methode?
Wenn die dicke Frau klatscht, ist die Oper zu Ende
Antworten