Aktuelle Zeit: 09.07.2020 09:58

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: SQL Anfänger
BeitragVerfasst: 10.04.2020 20:21 
Offline

Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Hallole und schon mal schöne Ostern wünsche ich euch allen.

Ich will was in SQL machen und fange gerade erst an damit die Beispiele mal zu probieren.

Dieser funktioniert ohne Probleme:

Code:
;
; ------------------------------------------------------------
;
;   PureBasic - Database example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
   Result = DatabaseUpdate(Database, Query$)
   If Result = 0
      Debug DatabaseError()
   EndIf
   
   ProcedureReturn Result
EndProcedure

DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"

If CreateFile(0, DatabaseFile$)
   CloseFile(0)
   
   If OpenDatabase(0, DatabaseFile$, "", "")
   
      CheckDatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), weight INT)")

      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
     
      If DatabaseQuery(0, "SELECT * FROM food WHERE weight > 7")
     
         While NextDatabaseRow(0)
            Debug GetDatabaseString(0, 0)
         Wend
     
         FinishDatabaseQuery(0)
      EndIf
     
      CloseDatabase(0)
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf


Dieser funktioniert zum Teil. Ich habe auch die Debugerwerte geschrieben:

Code:

UseSQLiteDatabase()

  Filename$ = OpenFileRequester("Wähle einen Dateinamen", "PureBasic.sqlite", "*.sqlite|*.sqlite", 0)
 
  If CreateFile(0, Filename$)
    Debug "Datenbank-Datei erstellt"
    CloseFile(0)
  EndIf
 
  If OpenDatabase(0, Filename$, "", "")
    Debug "Verbunden mit PureBasic.sqlite"
    If DatabaseUpdate(0, "CREATE TABLE info (test VARCHAR(255));")
      Debug "Tabelle erstellt"
    EndIf
  EndIf
 
 
  Ergebnis = OpenDatabase(0, "PureBasic.sqlite", "", "")
  Debug Ergebnis      ;Wert: 34609824
 
  Name$ = DatabaseColumnName(0, 0)
  Debug Name$         ;Wert: leer obwohl es doch test sein müsste oder? 
 
  DatenbankID = DatabaseID(0)
  Debug DatenbankID   ;Wert: 3189744
 
  Text$ = GetDatabaseString(0, 0)
  Debug Text$         ;Wert:leer
 
  Ergebnis2 = OpenDatabase(0, "PureBasic.sqlite", "", "")
  Debug Ergebnis2     ;Wert: 34609824 ==> sollte auch so sein 
 

 
  ; Zuerst stellen wir eine Verbindung zu der 'employee' (Angestellten) Tabelle her
  ;
  If DatabaseQuery(0, "SELECT * FROM PureBasic.sqlite")  ; Ermittelt alle Einträge in der 'employee' Tabelle

    While NextDatabaseRow(0)   ; alle Einträge durchlaufen
      Debug GetDatabaseString(0, 0)  ; Inhalt vom ersten Feld anzeigen
    Wend

    FinishDatabaseQuery(0)
  Else
    MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: "+DatabaseError())
  EndIf



Es kommt immer die Fehlermeldung: no such table: PureBasic.sqlite
Egal ob da Purebasic oder PureBasic.sqlite in dieser Zeile steht:

Code:
If DatabaseQuery(0, "SELECT * FROM PureBasic.sqlite")


Hat da jemand eine Idee an was das liegt und was ich falsch mache?

Danke

_________________
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 10.04.2020 20:54 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Es wird nicht bei SQL der Dateiname von der Datenbank verwendet.

Es gibt noch die "sqlite_master" Tabelle.
Ausserdem kann man zum testen auch sehr gut eine Memory Datenbank mit SQLite erstellen. (Dateiname ":memory:")

P.S. Vielleicht auch noch interessant
- ShowDatabaseItems
- A QUICK & SIMPLE TUTORIAL ON SQLite DATABASE FUNCTIONS

Code:
;-TOP

UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
  Result = DatabaseUpdate(Database, Query$)
  If Result = 0
    Debug DatabaseError()
  EndIf
 
  ProcedureReturn Result
EndProcedure

;DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"

DatabaseFile$ = ":memory:"

If OpenDatabase(0, DatabaseFile$, "", "")
 
  CheckDatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), weight INT)")
 
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
 
  Debug "*** Query food ***"
  If DatabaseQuery(0, "SELECT * FROM food WHERE weight > 7")
   
   
    While NextDatabaseRow(0)
      Debug GetDatabaseString(0, 0)
    Wend
   
    FinishDatabaseQuery(0)
  EndIf
 
  Debug "*** Query master ***"
  If DatabaseQuery(0, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name")
   
    While NextDatabaseRow(0)
      Debug GetDatabaseString(0, 0)
    Wend
   
    FinishDatabaseQuery(0)
  EndIf
 
  CloseDatabase(0)
Else
  Debug "Can't open database !"
EndIf

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 11.04.2020 21:08 
Offline

Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Hallo mk-soft,
danke für die Links. Habe jetzt viel zu tun um die Beispiele mal zu testen und nochmal schöne Ostern.
Hier gibt es keine Ostern, haben gerade ehh Ausgangssperre.

Wenn ich noch Fragen habe melde ich mich einfach nochmal.

Danke und Tschüßle

_________________
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 19.04.2020 20:42 
Offline

Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Hallole,
ich hoffe ihr hattet nette Ostern.

Ich habe eine csv Datei. Wenn man die komlett kopiert und in Excel einfügt wird jeder Bereich in einer separaten Spalte (insgesamt 16) eingefügt.
Von dem her alles in Ordnung was die Datei angeht.

Kann mir jemand einen Tipgeben wie ich diese Datei in eine SQLite (oder SQL) Datei einlesen kann?

- Unabhaengig von der Zeilenanzahl von der csv Datei
- Danach eine neue csv Datei anhaengen

Danke

_________________
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 20.04.2020 18:06 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: Dresden
Für ODBC gibt es Treiber für Excel- und CSV-Zugriff; wenn du das nutzen möchtest, findest du über die Suche einiges.

Ansonsten, als einfachste Vorgehensweise: Datei zeilenweise einlesen, die Werte jeder Zeile am Trennzeichen aufsplitten und dann für jede
Zeile ein Insert mit den aufgeteilten Werten.

_________________
Win10 x64 | PB 5.71 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 21.04.2020 20:19 
Offline

Registriert: 30.04.2009 21:21
Hi HemSA

Code:
If DatabaseQuery(0, "SELECT * FROM PureBasic.sqlite")

Das geht so nicht. Den SELECT Befehl kannst Du auf eine Tabelle anwenden, nicht aber auf die Datenbank. Die öffnest Du mit "OpenDatabase()"

richtig wäre:
Code:
If DatabaseQuery(0, "SELECT * FROM info")



Hier mal ein Beispiel mit DB Aufbau, passender CSV Datei, und einlesen der CSV Datei in die Datenbank

Code:
UseSQLiteDatabase()

Enumeration
  #File
  #Database
EndEnumeration

Define Query.s
Define String.s

; Vorbereitung CSV Datei (Trennzeichen ";" )
CreateFile(#File,"myCSV.csv")
CloseFile(#File)
OpenFile(#File,"myCSV.csv")
WriteStringN(#File,"25;Hallo;3.141")
WriteStringN(#File,"18;Welt;2.718")
CloseFile(#File)

CreateFile(#File,"MyDB.db")
CloseFile(#File)
If OpenDatabase(#Database,"MyDB.db","","",#PB_Database_SQLite)
  Query = "CREATE TABLE `mytable` (wert1 INT,wert2 CHAR,wert3 float)"     ;Die Tabelle besteht aus 3 Feldern
  If DatabaseUpdate(#Database,Query)
    OpenFile(#File,"myCSV.csv")
    While Not Eof(#File)                            ;Lies solange eine Zeile ein bis keine mehr da sind
      String = ReadString(#File)                    ;Schreibe die gelesene Zeile in die Variable "String"
      Query = "INSERT INTO `mytable` (wert1,wert2,wert3) VALUES (" + StringField(String,1,";") + ",'" + StringField(String,2,";") + "'," + StringField(String,3,";") + ")"      ;Zerlegen der Felder welche mit ";" getrennt wurden
      DatabaseUpdate(#Database,Query)
    Wend 
    CloseFile(#File)
  EndIf
  CloseDatabase(#Database)
EndIf


Viel Spaß beim Probieren

_________________
Wissen schadet nur dem, der es nicht hat !


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 24.04.2020 23:10 
Offline

Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Hallole MenschMarkus,
erst mal vielen Dank für deinen Post.

Ich habe ein Problem mit dem ich nicht zurecht komme.

Meine Datei ist TAB getrennt.

Ich machte dein Beispiel dann auch so.

Zitat:
Query = "CREATE TABLE `mytable` (wert1 CHAR,wert2 CHAR,wert3 CHAR)"


Aber nach vielen Änderungen kommt nicht das raus was ich will.

Wie muss diese Zeile aussehen für meinen Fall?
Komme da nicht mit den
+
'
Zeichen klar.

Zitat:
Query = "INSERT INTO `mytable` (wert1,wert2,wert3) VALUES (" + StringField(String,1," ") + "','" + StringField(String,2," ") + "','" + StringField(String,3," ") + ")" ;Zerlegen der Felder welche mit "Tab" getrennt wurden


Vielen Dank im Voraus.

_________________
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 25.04.2020 15:05 
Offline

Registriert: 30.04.2009 21:21
OK, ist auch kein Problem. Der Query mit TAB sieht wie folgt aus:

Code:
Query = "INSERT INTO `mytable` (wert1,wert2,wert3) VALUES ('" + StringField(String,1,Chr(9)) + "','" + StringField(String,2,Chr(9)) + "','" + StringField(String,3,Chr(9)) + ")" ;Zerlegen der Felder welche mit "Tab" getrennt wurden

(Im Menüpunkt Werkzeuge > Zeichentabelle findest du die ASCII Werte für die Character)

Das Hochkomma ' zeigt SQLite an jetzt kommt ein zusammenhängender String z.B. 'text' oder auch 'dies ist ein text'
Diese Zeichen muss innerhalb des Query Strings geschrieben werden wenn anschließend eine PB Variable folgt

Richtig:
Code:
Query = " ... VALUES ('" + ....

Falsch:
Code:
Query = " ... VALUES (" + ' ....

Falsch:
Code:
Query = " ... VALUES ("' +  ....


Die Anführungszeichen " am Ende eines Textes sagen PB: hier hört der Text auf. Mit dem + nach dem abschließenden " weiß PB aber, jetzt folgt noch mehr Information.
Also, Texte mit einem Ergebnis einer Variablen zu verbinden funktioniert immer so
Code:
text.s = "menschmarkus"
ergebnis.i = 5
gesamttext.s = "Du darfst mich " + text.s + " nennen"
rechnen.s = "Das Ergebnis " + Str(ergebnis) + " kann mit 3 + 2 errechnet werden"

Achte darauf wenn Du eine numerische Variable hast diese mit Str(numvariable) in einen Text umzuwandeln

_________________
Wissen schadet nur dem, der es nicht hat !


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 25.04.2020 15:24 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Um Stringverknüpfungen lesbarer zu machen, verwende ich persönlich folgende Vorgehensweise:

Code:
Wert1 = StringField(String, 1, #TAB$)
Wert2 = StringField(String, 2, #TAB$)
Wert3 = StringField(String, 3, #TAB$)

Query = "INSERT INTO `mytable` (wert1, wert2, wert3) VALUES ('" + Wert1 + "', '" + Wert2 + "', '" + Wert3 + "')"


Grüße ... Peter

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQL Anfänger
BeitragVerfasst: 25.04.2020 16:50 
Offline

Registriert: 30.04.2009 21:21
@Kiffi

klar, geht natürlich auch :)

Die implizite Schreibweise die ich hier verwendet habe hat halt den Vorteil, dass ich weniger Code programmieren muss. Um den Query auch prüfen zu können schreibe ich den Query String auch in die gleichgenannte Variable Query.s
Und Danke für die Anmerkung

LG
menschmarkus

_________________
Wissen schadet nur dem, der es nicht hat !


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye