Seite 3 von 5

Verfasst: 23.09.2008 17:16
von Kiffi
Palandt hat geschrieben:problemlos von einst Jus.mdb in Jus.sql umwandelte. Ich kann mir das Teil sogar im Windows-Editor anschauen.
:-)

das, was das VBS da generiert hat, sind SQL-Anweisungen, die Du einem
geeigneten Tool [1] übergeben musst. Das Tool macht dann aus den
Anweisungen eine richtige Datenbank.

Soweit ich das in richtiger Erinnerung habe, musst Du einige SQL-Queries
entfernen (ich glaube, sowas wie Drop Table (die machen natürlich keinen
Sinn, wenn die Tabelle noch nicht vorhanden ist) etc.)

Grüße ... Kiffi

[1]: mein Favorit ist tksqlite
(freeware; http://reddog.s35.xrea.com/software/tks ... 32-bin.zip)

Verfasst: 23.09.2008 17:31
von Palandt
Danke Kiffi, ich habs eben grad auch bemerkt als ich die Datei noch mal geöffnet hab, da schimmert einem bei genauem Hinsehen dann ein "INSERT INTO..." - Befehl nach dem anderen entgegen.

Nur ich hab die Befürchtung, dass bei meiner 20.000 Datensatz langen Datenbanl ein Textungeheuer von der Länge der Bibel herauskommen wird. Jede Zeile einzeln über den Kommandozeileninterpreter SQLite3.exe einzugeben, das wär ja nicht durchführbar.

Deshalb teste ich jetzt mal deinen Link und schau, ob das Programm, das sich dahinter verbirgt, imstande Jus.sql in Jus.db zu verwandeln.

Verfasst: 23.09.2008 18:00
von Palandt
Ich hab das Programm getestet, hatte übrigens schon sei ähnliches runtergeladen (SQLite-Manager als Add-On für Firefox). Das Problem ist nur, dass sowohl dein Prog als auch das von mir bei der Ausführung des Codes, den der VBS-Konverter geriert hat, mindestens 10 Fehler gemeldet hab, die ich von Hand korrigieren musste und das bei meiner lächerlichen Testdatenbank, die 404 Kilobyte groß ist während meine Hauptdatenbank (im Moment noch) satte 48 Megabyte umfasst. Da wär ich ja nur beim Korrigieren. Echt schade, wär gern auf SQLite umgestiegen, aber den Aufwand mach ich mir nicht, da bleib ich - zumindest für das Projekt - lieber bei Access. Aber trotzdem danke für deine Tipps.

Verfasst: 23.09.2008 19:15
von Kiffi
Palandt hat geschrieben:Echt schade, wär gern auf SQLite umgestiegen, aber den Aufwand mach
ich mir nicht, da bleib ich - zumindest für das Projekt - lieber bei Access.
mannomann, Du wirfst aber ziemlich schnell die Flinte in's Korn :shock:

Du bräuchtest lediglich die Zeilen:

"SET DEFINE OFF;", "DROP TABLE *;" und "COMMIT;"
auszukommentieren, indem Du 2 Minuszeichen davor stellst.

Code: Alles auswählen

-- SET DEFINE OFF;
[...]
-- DROP TABLE *;
[...]
-- COMMIT;
Mit jedem besseren Texteditor ist das eine Sachen von Sekunden.

Aber gut, man kann niemanden zu seinem Glück zwingen.
Mit Access kommt PB ja schließlich auch zurecht. ;-)

Grüße ... Kiffi

Verfasst: 23.09.2008 19:52
von Palandt
Nee, nee, Kiffi, wenn das nur mal die Korrekturen wären, das wär ja noch machbar, nein, in den INSERT INTO Tabellenname VALUES () - Befehlen waren Fehler (beim Einfügen von date- bzw. timeformatbasierten Daten) und die alle zu korrigieren wäre zuviel Aufwand. Denn in meiner Hauptdatendank enthält alleine schon eine Tabelle zumeist ca. 100 - 200 Datensätze, das hieße 100 - 200 den Fehler beheben und ich habe ca. 100 Tabellen. Also jetzt müsstest du mir schon son bisschen zustimmen, dass diese Korrekturen nicht von Hand durchführbar sind.

Ich habe bereits festgestellt, dass Access in der Lage ist Textdateien anzulegen. Die Tabellen selbst, folgen alle diesem Schema CREATE TABLE Tabellenname (FragenID INT, Frage CHAR, AntwortID CHAR, Thema CHAR, HL INT, Link CHAR). So, wenn also Access eine Textdatei vom Inhalt der Tabellen anlegt und ich diese Inhalte dann automatisiert (also nicht jedes mal INSERT INTO eingeben) in die jeweiligen Tabellen einlesen könnte, dann wärs eventuell machbar.

Ich schau mich im Netz nochmal um, ob ich dafür was Geeignetes finde. Wenn du mein Kauderwelsch verstanden hast und weisst, was ich meine, vielleicht kennst ja auch du so ein Tool.

Denn dein und mein Prog für die SQL-Eingabe verlangen alle den INSERT INTO Befehl. Was mir da quasi fehlen würde, wäre ne Funktion, die es nach Erstellung der Tables mit dem CREATE Befehl ermöglicht diese anzuwählen und dann sozusagen mit einem "Import Text into Table" Textdateien einzulesen und damit das Gerüst der Tabelle mit "Datenleben" zu füllen.

Verfasst: 23.09.2008 20:22
von Kiffi
Palandt hat geschrieben:Nee, nee, Kiffi, wenn das nur mal die Korrekturen wären, das wär ja noch
machbar, nein, in den INSERT INTO Tabellenname VALUES () - Befehlen
waren Fehler (beim Einfügen von date- bzw. timeformatbasierten Daten)
und die alle zu korrigieren wäre zuviel Aufwand.
ok, sorry, das ist was anderes. Ich bin davon ausgegangen, dass Du die von
mir geposteten Fehler meinst.

Was mir noch so auf die Schnelle einfallen würde: Exportiere Deine Daten
aus Access als CSV-Dateien (weißt Du was das ist? Wenn nicht: Fragen!),
welche TKSQLite dann mittels "Import / Textfile" in eine bestehende
Datenbank importieren kann.

Aber wie gesagt: Bevor Du Dir da anfangs unnötige Stress machst: PB
kann auch mit Access ganz ordentlich umgehen und die Konvertierung zu
SQLite läuft ja nicht weg. Wenn Du dann mal später auf SQLite umsteigen
solltest, kannst Du nach wie vor die gleichen Befehle verwenden, die Du
auch für die Access-DB einsetzt.

Grüße ... Kiffi

Verfasst: 23.09.2008 20:43
von Palandt
Da ich aber die Features von SQLite - auf der englischsprachigen Seite dargestellt, die mir hier irgendwer von euch empfohlen hat - gelesen hab, bin ich davon überzeugt, dass gerade angesichts der genialen Portabilität von SQLite (kein "Homeserver" wie Apache nötig, kein teures Microsoft-Produkt, um mal eben per Hand Korrekturen vorzunehmen) dieses Datenbanksystem einfach für meine Zwecke besser geeignet ist.

Was CSV angeht: Keine Ahnung, was das ist. Aber ich wollts trotzdem mal ausprobieren, aber mein Access 2003 bietet keinen Export in CSV an. Angeboten wird nur der Export in:
- dbase
- Excel
- HTML
- Lotus
- Paradox
- Textdatei
- Windows Share Point Services
- MS ASP
- MS IIS oder so ähnlich
- RTF - Format
- MS Word Merge
- XML
- ODBC - Datenbanken (verlangt
irgendwelche abgespacten
Treiber)

Verfasst: 23.09.2008 20:48
von cxAlex
CSV = comma separated values

Das sind durch ',' getrennte Datensätze, z.B:

Ich,Affe,Hans
Brot,Wein,Null

Das primitivste mögliche Format ^^

Verfasst: 23.09.2008 21:47
von Kiffi
@Palandt: Hier mal auf die schnelle zusammengehackt:

Code: Alles auswählen

UseODBCDatabase()

DB = OpenDatabase(#PB_Any, "deine_mdb_odbc", "", "")

If DB
  
  If DatabaseQuery(DB, "Select * From deine_tabelle")
    
    FF = CreateFile(#PB_Any, "deine.csv")
    
    If FF
      
      For Counter = 0 To DatabaseColumns(DB) - 1
        
        WriteString(FF, DatabaseColumnName(DB, Counter))
        
        If Counter < DatabaseColumns(DB) - 1
          WriteString(FF, ";")
        EndIf
        
      Next
      
      WriteStringN(FF, "")
      
      While NextDatabaseRow(DB)
        
        For Counter = 0 To DatabaseColumns(DB) - 1
          
          WriteString(FF, Chr(34) + GetDatabaseString(DB, Counter) + Chr(34))
          
          If Counter < DatabaseColumns(DB) - 1
            WriteString(FF, ";")
          EndIf
          
        Next
        
        WriteStringN(FF, "")
        
      Wend
      
      CloseFile(FF)
      
    Else
      
      Debug "!CreateFile"
      
    EndIf
    
  Else
    
    Debug "!DatabaseQuery"
    
  EndIf
  
  CloseDatabase(DB)
  
Else
  
  Debug "!DB"
  
EndIf
Du musst folgendes machen, bevor Du den Code ausführst:

Systemsteuerung -> Verwaltung -> ODBC: hier trägst Du unter
Benutzer-DSN deine Access-MDB ein. Den Namen, den Du dort vergibst,
trägst Du oben in den Code ein (OpenDatabase())

"deine_tabelle" ersetzt Du im Code durch den Namen der Tabelle, die
exportiert werden soll.

"deine.csv" ersetzt Du im Code durch den Namen der CSV-Datei, die Du
generieren möchtest.

Nachdem Du den Code hast laufen lassen, kannst Du die CSV nun mittels
TKSQLite importieren. Als Trennzeichen gibst Du das Semikolon ein.
Ansonsten muss nichts geändert werden.

Grüße ... Kiffi

Verfasst: 24.09.2008 11:02
von Palandt
Allerbesten Dank Kiffi, ich lass dir ne Kiste Bier nach Hause schicken. :) Ich komme leider erst heute abend dazu, den Kram auszutesten, muss heute nämlich noch tierisch viel für die Uni machen.

Hatte mir heute morgen beim Joggen (da kommen mir die geilsten Einfälle!) noch ne andere Alternative ausgedacht: Ich lass meine Datenbank doch mit dem VBS-Skript konvertieren, öffne Sie dann mit einem besseren Texteditor und nutze die ERSETZEN-FUNKTION (bei Word glaub ich mit Strg + F oder Strg + H aktivierbar) um alle fehlerhaften INSERT INTO Befehle zu reparieren. Das halte ich aus dem Grund für vielversprechend, weil die Fehler zwar Tausend Mal auftauchen, aber dafür immer die gleichen sind. Wenn das klappen sollte, hast du den Code zwar nicht umsonst, übt ja schließlich ;), geschrieben, aber ich habs dann halt anders hingekriegt. Trotzdem vielen Dank für deine Hilfsbereitschaft, wenn du mal nen Anwalt brauchst, ruf an...:)

Meld mich heut abend und sag, ob's gefunzt hat!