Datenbank-Report Fehler

Spezielle Fragen zu PostgreSQL, MySQL, SQLite, SQL ...
Antworten
Honsek
Foriker
Beiträge: 328
Registriert: Do 4. Okt 2007, 17:01
Kontaktdaten:

Datenbank-Report Fehler

Beitrag von Honsek » So 4. Jan 2015, 10:36

Hallo,

für den Test von unterschiedliche DB-Reports (MySQL. SQLite3, Postgres) benötige ich für unterschiedliche Report-Varianten (Cairo, gb.reports, HTML, XML) viele Pseudo-Datensätze, damit ich mindestens 2 DIN-A4-Seiten füllen kann. Die beiden Projekte sind identisch. Es wird einmal der Datenbanktyp mysql eingesetzt und beim anderen sqlite3.

1. Fall: MySQL + Komponente gb.report

Dieser Anweisungsblock funktioniert einwandfrei. Die Datensätze werden in eine leere DB-Tabelle eingetragen und sofort in einem DataBrowser angezeigt.

gambas code
sSQL_Anweisung = "INSERT INTO `t_contacts` VALUES "
sSQL_Anweisung &= "('1','Arno','Adler','Arneburg','39606','Am Hafen 3','1980-07-30','03937864322','0171','leiter@welt.de'),"
sSQL_Anweisung &= "('2','Bruno','Bär','Berlin','10404','Bode-Strasse 1','1980-07-30','03094157777','0171','leiter@welt.de');"

DBKontakte.Begin
DBKontakte.Exec(sSQL_Anweisung)
DBKontakte.Commit


2. Fall SQLite3 + Komponente gb.report

Dieser Anweisungsblock funktioniert NICHT. Die Prozedur wird abgebrochen mit der Fehlermeldung, dass die SQL-Anweisung einen Fehler enthält?!

gambas code
sSQL_Anweisung = "INSERT INTO `t_contacts` VALUES "
sSQL_Anweisung &= "('1','Arno','Adler','Arneburg','39606','Am Hafen 3','1980-07-30','03937864322','0171','leiter@welt.de'),"
sSQL_Anweisung &= "('2','Bruno','Bär','Berlin','10404','Bode-Strasse 1','1980-07-30','03094157777','0171','leiter@welt.de');"

DBKontakte.Begin
DBKontakte.Exec(sSQL_Anweisung)
DBKontakte.Commit


Diese Anweisungsfolge dagegen funktioniert bei SQLite3 einwandfrei - so wie bei MySQL:
gambas code
DBContacts.Begin
DBContacts.Exec("INSERT INTO `gbcontacts` VALUES ('1','Arno','Adler','Arneburg','39606','Am Hafen 3','03937864322');")
DBContacts.Exec("INSERT INTO `gbcontacts` VALUES ('2','Bruno','Bär','Berlin','10404','Bode-Strasse 1','03094157777');")
DBContacts.Commit


Kann man bei SQLite3 jeweils nur einen Datensatz einfügen und keine Liste der Datensätze angeben?

Ein zweiter Fehler zeigt sich dann im Report unter SQLite3 in der Weise, dass
gambas code
Print resData.Fields[0].Name


nicht wie erwartet den Feld-Namen ausgibt, sondern 'gbcontacts.Vorname'. Der Fehler tritt bei MySQL NICHT auf; es wird 'Vorname' ausgegeben.
Die Feldinhalte werden mit rlblData.Text = resData[iC] korrekt ausgegeben.

Was nun - was tun?

Mit freundlchem Gruß

Honsek
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!

Benutzeravatar
4tionov
Site Admin
Beiträge: 160
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Datenbank-Report Fehler

Beitrag von 4tionov » So 4. Jan 2015, 10:53

Hi Honsek,

lass die Backticks in den Feldnamen weg (das ist eine Mysql-Besonderheit) und wenn du schon die Gelegenheit hast, in drei DB-Systemen die Feldnamen selbst vergeben zu dürfen, dann nehme dafür Kleinbuchstaben, keine Sonderzeichen, keine Umlaute und keine reservieren Wörter (wie table, text, insert, integer, values usw usf). Dann sollten Insert- und Update-Anweisungen in allen DB durchlaufen.
Alles Gute,

4tionov

Honsek
Foriker
Beiträge: 328
Registriert: Do 4. Okt 2007, 17:01
Kontaktdaten:

Re: Datenbank-Report Fehler

Beitrag von Honsek » So 4. Jan 2015, 16:43

Hallo Christof,

schön von Dir zu lesen. Deine Hinweise habe ich umgesetzt; bringen aber leider keine Änderungen. Die Fehlermeldungen und Ungereimtheiten bleiben.

Mit freundlichem Gruß

Hans
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!

Benutzeravatar
4tionov
Site Admin
Beiträge: 160
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Datenbank-Report Fehler

Beitrag von 4tionov » So 4. Jan 2015, 23:41

Hi Hans,

Honsek hat geschrieben:schön von Dir zu lesen. Deine Hinweise habe ich umgesetzt; bringen aber leider keine Änderungen. Die Fehlermeldungen und Ungereimtheiten bleiben.


Hmm. Ok. Keine Ahnung. DBs sind unterschiedlich (darum habe ich dir die Hinweise gegeben, um das erst mal zu minimieren). Warum SQLite den tablename mit ausspuckt, ist mir nicht klar. Aber ich weiß auch nicht, wie fragt Gambas selbst die Feldnamen ab.

Aber: Wofür willst du eigentlich von der DB die Feldnamen haben? Du weiß die doch normalerweise und kannst sie einfach in deiner Anwendung in den SQL-String schreiben, wenn du Daten abfragst. Darüber hinaus haben DBs unterschiedliche Vorgehensweisen, diese Metadaten zu speichern und bieten unterschiedliche Möglichkeiten, sie abzufragen. Das geht in Postgresql anders als in Mysql usw.

Laut SQLite Doku können übrigens Values mehrfach übergeben werden:
https://www.sqlite.org/lang_insert.html

Aber insgesamt würde ich erst mal die SQL-Befehle in SQLite selbst ausprobieren, und wenn das funktioniert, das in Gambas machen. Kannst du mal die SQLite DB mitsenden?
Alles Gute,

4tionov

Antworten

Wer ist online?

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