Mit ADOMate Datenbank Abfrage erstellen mit ORDER BY

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
max11
Beiträge: 15
Registriert: 01.09.2007 12:07
Computerausstattung: Windows 7 pro PureBasic 5.40 LTS

Mit ADOMate Datenbank Abfrage erstellen mit ORDER BY

Beitrag von max11 »

Hallo Forum,
ich möchte für ACCESS 2007 eine mdb erstellen lassen, das erstellen der Tabelle, Abfrage funktioniert super nur sobalt ich die Abfragen mit ORDER BY Index oder name erweitere, wird die Sicht in der mdb NICHT erstellt und es kommt keine Fehlermeldung.
Im Beispiel die Sichr Info2, Info3 wird nicht erstellt.
kennt einer das Problem oder hat da einer eine Idee?

Code: Alles auswählen

EnableExplicit

XIncludeFile "ADOmate.pbi"

Procedure.s fnCnn()
  Protected conStr.s
  conStr =          "Provider=Microsoft.Jet.OLEDB.4.0;"
  conStr = conStr + "Data Source="
  conStr = conStr + "Info.mdb;"
  ProcedureReturn conStr
EndProcedure
;
; erstellte nur die DB
;
Procedure DB_Erstellen()
  Protected DBid.i
  DBid = ADOmate_CreateDatabase(fnCnn())
  If DBid
    ADOmate_CloseDatabase(DBid)
  Else
    MessageRequester("ADO Fehler!", ADOmate_GetLastErrorDescription())
  EndIf
EndProcedure
;
; Erstellt eine Tabelle mit Feld Id Autowert mit Primärschlüssel 
; Datum/Zeit als Zeitstempel
;
Procedure TabelleErstellen(conString.s)
  
  Protected myCon, cmd.s
  myCon = ADOmate_OpenDatabase(conString)
  If myCon
    cmd = "CREATE TABLE tabInfo ("             +  
          "id COUNTER NOT NULL PRIMARY KEY, "  +
          "VgNr             Text(9), "         +
          "Bemerkung        Text(255), "       +
          "Memo1            MEMO, "            + 
          "Datum TIMESTAMP NULL DEFAULT NOW()" +
          ");"
    ADOmate_DatabaseUpdate(myCon, cmd) 
    ADOmate_CloseDatabase(myCon)
  Else
    MessageRequester("ADO Fehler!", ADOmate_GetLastErrorDescription())  
  EndIf 
EndProcedure
;
; Sicht Info erstellen
;
Procedure AbfrageInfoErstellen(conString.s)
  Protected myCon, cmd.s
  myCon = ADOmate_OpenDatabase(conString)
  If myCon
    ;ORDER BY tabInfo.Datum DESC
    cmd = "CREATE VIEW info1 AS SELECT tabInfo.VgNr, tabInfo.Bemerkung, tabInfo.Datum FROM tabInfo;"
    ADOmate_DatabaseUpdate(myCon, cmd) 
    cmd = "CREATE VIEW info2 AS SELECT tabInfo.VgNr, tabInfo.Bemerkung, tabInfo.Datum FROM tabInfo ORDER BY 3 DESC;"
    ADOmate_DatabaseUpdate(myCon, cmd) 
    cmd = "CREATE VIEW info3 AS SELECT tabInfo.VgNr, tabInfo.Bemerkung, tabInfo.Datum FROM tabInfo ORDER BY tabInfo.Datum DESC;"
    ADOmate_DatabaseUpdate(myCon, cmd) 
    cmd = "CREATE VIEW info4 AS SELECT tabInfo.VgNr, tabInfo.Bemerkung, tabInfo.Datum FROM tabInfo;"
    ADOmate_DatabaseUpdate(myCon, cmd)
    ADOmate_CloseDatabase(myCon)
  Else
    MessageRequester("ADO Fehler!", ADOmate_GetLastErrorDescription())  
  EndIf 
EndProcedure
;
; 
;
Procedure NeueDB_erstellen()
  Protected DbDatei.s, cnnStr.s 
  DbDatei = "Info.mdb"
  ; falls die Datei schon vorhanden ist löschen
   If FileSize(DbDatei) > 0
     DeleteFile(DbDatei)
   EndIf
  cnnStr = fnCnn()
  ; Falls die DB nicht vorhanden ist erst die DB erstellen
  If FileSize(DbDatei) = -1
    DB_Erstellen()
  EndIf
  ;Tabelle Info erstellen
  TabelleErstellen(cnnStr)
  ;Sicht erstellen 
  AbfrageInfoErstellen(cnnStr)
  
EndProcedure

NeueDB_erstellen()
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mit ADOMate Datenbank Abfrage erstellen mit ORDER BY

Beitrag von Kiffi »

ich schätze mal, dass das Erstellen von View mit Order By schlicht und ergreifend so nicht möglich ist.

ADOmate_GetLastErrorDescription() gibt bei info2 und info3 folgende Meldung aus:
ADOmate hat geschrieben:Nur einfache SELECT-Abfragen in VIEWS zulässig.
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
max11
Beiträge: 15
Registriert: 01.09.2007 12:07
Computerausstattung: Windows 7 pro PureBasic 5.40 LTS

Re: Mit ADOMate Datenbank Abfrage erstellen mit ORDER BY

Beitrag von max11 »

Hallo Kiffi,

ja das ist ja komisch da ich ja eine SELECT abfrage erstellen möchte und bei SELECT laut Fehlermeldung solls doch gehen? Oder verstehe ich das falsch?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mit ADOMate Datenbank Abfrage erstellen mit ORDER BY

Beitrag von Kiffi »

in einem View werden ja keine Daten gespeichert, sondern nur die Select-Abfrage selber. Damit können beispielsweise komplizierte und umfangreiche Select-Abfragen (die sich beispielsweise über mehrere Tabellen erstrecken) in einem einfachen View-Aufruf erledigt werden:

Code: Alles auswählen

Select * From info3 ORDER BY tabInfo.Datum DESC
(Siehe auch: https://de.wikipedia.org/wiki/Sicht_(Datenbank))

Grüße ... Peter
a²+b²=mc²
Antworten