"Konvertierung" eines Projekts von VB in PB
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.
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
ok, neuer Versuch.
Nachfolgender Code konvertiert die in einer Access-MDB vorhandenen
und im Code eingetragenen Tabellen in eine SQLite-Datenbank (bitte
Kommentare lesen!)
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
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
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²
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 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
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….
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
- 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
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
> ....
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
> ....

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

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
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:
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. 

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

Wenn die dicke Frau klatscht, ist die Oper zu Ende
- 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
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

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
