![]() |
Datenbank: MySQL5 • Version: 5.5.19 • Zugriff über: ZEOS
ZEOS select
Hallo,
arbeite mit der Zeoskomponente. Meine verwendete Tabelle ist recht groß (ein paar bye header + 560(float) Werte) habe nun nach langem Suchen festgestellt, das die Probleme die ich beim update,select habe mit der Anzahl der Datenbankfelder zu tun haben. Habe die Tabelle im weiter verkleinert (Felder gelöscht) und irgendwann bekomme ich den Fehler "Fehler bei Bereichsprüfung nicht mehr. Auch wenn ich z.B. nur einige Felder selektiere funktioniert die Abfrage. Wie auch immer ich muß doch aber auch für reports alles (select *) können. Kann ich da irgendas optimieren? begin ZConnection1.Connected := true; ZQuery1.Close; ZQuery1.SQL.Clear; SQL_str := 'select * from my.Trock'; ZQuery1.SQL.Text := sql_str; ZQuery1.Open; end; |
AW: ZEOS select
Was hat ein Select mit der delphi-internen Bereichsüberprüfung zu tun?
Wo tritt der Fehler überhaupt auf? Wenn nach dem Verkleinern der Tabelle via Löschen von Feldern der Fehler nicht mehr auftritt, müßtest du doch auch sagen können, welches Feld für den Fehler verantwortlich war. Überhaupt stellst du viel zu wenig über dein Projekt zur Ansicht, um auch nur ansatzweise auf eine ziemlich verworrene Fragestellung antworten zu können. |
AW: ZEOS select
Zitat:
Delphi-Quellcode:
machen.
begin
ZConnection1.Connected := true; ZQuery1.Close; ZQuery1.SQL.Text:='select * from my.Trock'; ZQuery1.Open; end; Und ich sehe keinen Grund warum die Bereichsüberprüfung hier zuschlagen sollte. Nutzt Du hier in der Nähe ein dyn. Array, was Du uns unterschlagen hast? Und warum holst Du die Daten, die Du abforderst nicht auch ab? Gruß K-H K-H |
AW: ZEOS select
Danke, für Eure Anworten. Hab mich jetzt Feld für Feld rangetatstet. Bei 256 Felder ist Schluß. Habe die Tabelle suggsesive vergrößert. Ab 256 Felder in der mySQL-Tabelle bekomme ich von der ZQuery einen "Fehler bei Bereichsprüfung" zurück. Ist nachfollziehbar. Habe bis jetzt keinen Hinweise auf die Maximale Anzahl von Spalten (Feldern) gefunden.
ZQuery-ZConnection-Datasource-DBGrid |
AW: ZEOS select
Es scheint sich ja um ein nicht normalsiertes Datenbankschema zu handeln
|
AW: ZEOS select
Die Struktur der Tabelle steht fest, ich habe nur versucht Schritt für Schritt an das Problem zu gelangen. Mir ist keine Begrenzung auf Spaltenanzahl bekannt.
Problem tritt auf ab: Größe: (varchar(10)+Datetime+3*int)+252*float bzw. SpAnzahl: 5+252=257. Also muss es doch irgendwo eine Begrenzung auf 256 Felder geben? Oder |
AW: ZEOS select
Bei einem normalsierten Schema ist eine deart große Anzahl von Spalten aber fast ausgeschlossen.
|
AW: ZEOS select
Es kann ja immerhin sein, dass die Spaltenanzahl ZEOS-intern als Byte definiert ist. Da gehen halt nur 256 (obwohl eigentlich 255?) rein, was normalerweise dicke ausreichen sollte.
|
AW: ZEOS select
Es gibt nur eine einzige Tabelle "Messwerte". Hier werden zyklisch Messdaten aus einer (SPS)Anlage abgelegt. Dabei fallen leider pro ID (Prüfnr) so viele real-Werte an.
|
AW: ZEOS select
und wie wäre es mit
Id wert timestamp das sollte eigentlich ausreichen ? Gruß K-H |
AW: ZEOS select
Zitat:
![]() Zitat:
Ausreichen sollte es in der Tat. Aber wenn er nun mal eine Tabelle mit über 500 Feldern hat und die so benötigt, muß er sich wohl anders behelfen. |
AW: ZEOS select
Der Maximalwert von Byte ist aber nunmal 255, deshalb meine Verwunderung. Kann man eigentlich Tabellen ohne Spalten anlegen? Wenn nicht (sowas versuch ich ja gar nicht erst), dann wird wohl intern die 0 als 1 interpretiert, somit wäre alles klar.
|
AW: ZEOS select
Ja aber der Wertebereich ist von 0 -255 als 256 Werte (Felder)
|
AW: ZEOS select
Achso, wenn das der Spaltenindex ist, klar. Ich war gedanklich bei einer Anzahl, was bei genauerer Überlegung ja auch Quatsch wäre.
|
AW: ZEOS select
Zitat:
MySQL-Version: 5.5 Zeos-Version: 7.0.0-dev Delphi-Version: 2009 pro Windows-Version: XP Pro |
AW: ZEOS select
Das könnte am 7er ZEOS liegen, da soll sich ja einiges getan haben.
|
AW: ZEOS select
Zitat:
@jangbu: Bastel dir doch mal ein kleines Testprogramm und probiere selber aus, wo die Grenzen liegen. Vor allem aber solltest du bei Fremdkomponenten nach Möglichkeit immer die neuesten Releases einsetzen. Mein kleines Testprogramm:
Delphi-Quellcode:
Bei 990 Spalten, wobei die letzten 290 vom Typ FLOAT sind, war dann aber Schluß. Ich vermute daher, daß der für eine einzige Tabellendefinition verfügbare Speicher begrenzt ist ...
unit UnitMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, JvExDBGrids, JvDBGrid, ComCtrls; type TFormMain = class(TForm) Button_Tabellen: TButton; ListBox_Tabellen: TListBox; Button_Anlegen: TButton; ListBox_Spalten: TListBox; DBGrid1: TDBGrid; Button_FelderDel: TButton; UD_Anzahl: TUpDown; Edit_Anzahl: TEdit; procedure Button_TabellenClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Button_AnlegenClick(Sender: TObject); procedure Button_FelderDelClick(Sender: TObject); private { Private-Deklarationen } PROCEDURE TabellenNamen; public { Public-Deklarationen } end; var FormMain: TFormMain; implementation {$R *.dfm} USES UnitData; VAR Pfad : String; procedure TFormMain.FormActivate(Sender: TObject); begin Pfad := ExtractFilePath(ParamStr(0)); DatMod.ZCon.Connect; IF NOT DatMod.ZCon.Connected THEN BEGIN ShowMessage('keine Verbindung'); END; DatMod.ZTab_Test.Active := TRUE; TabellenNamen; end; PROCEDURE TFormMain.TabellenNamen; BEGIN DatMod.ZCon.GetTableNames('test',ListBox_Tabellen.Items); DatMod.ZTab_Test.Close; DatMod.ZTab_Test.Open; DatMod.ZTab_Test.GetFieldNames(ListBox_Spalten.Items); END; // Tabelle erweitern procedure TFormMain.Button_AnlegenClick(Sender: TObject); VAR i,A,Z : Integer; Datei, Aus : String; begin A := ListBox_Spalten.Count; Z := A + UD_Anzahl.Position -1; Datei := Pfad + 'Alter.txt'; DatMod.ZQuery1.SQL.Clear; DatMod.ZQuery1.SQL.Append('ALTER TABLE test.testtabelle'); FOR i := A TO Z DO BEGIN Aus := IntToStr(i); IF i < 100 THEN Aus := '0' + Aus; IF i < 10 THEN Aus := '0' + Aus; IF i = Z THEN Aus := 'ADD Spalte_' + Aus + ' FLOAT' ELSE Aus := 'ADD Spalte_' + Aus + ' FLOAT,'; DatMod.ZQuery1.SQL.Append(Aus); END; // DatMod.ZQuery1.SQL.SaveToFile(Datei); DatMod.ZQuery1.ExecSQL; TabellenNamen; ShowMessage(IntToStr(Z - A + 1) + ' neue Spalten angelegt'); end; // Spalten löschen procedure TFormMain.Button_FelderDelClick(Sender: TObject); VAR i,A : Integer; Aus : String; begin A := ListBox_Spalten.Count -1; DatMod.ZQuery1.SQL.Clear; DatMod.ZQuery1.SQL.Append('ALTER TABLE test.testtabelle'); FOR i := 1 TO A DO BEGIN Aus := ListBox_Spalten.Items[i]; IF i = A THEN DatMod.ZQuery1.SQL.Append('DROP ' + Aus) ELSE DatMod.ZQuery1.SQL.Append('DROP ' + Aus + ','); END; DatMod.ZTab_Test.Close; DatMod.ZQuery1.ExecSQL; TabellenNamen; ShowMessage('Alle Spalten bis auf Spalte_000 gelöscht'); end; procedure TFormMain.Button_TabellenClick(Sender: TObject); begin TabellenNamen; end; end. Nun hab ich mir noch die Mühe gemacht und eine Lösch-Methode geschrieben, nach deren Ausführung ich ohne Probleme 900 Felder vom Typ FLOAT in meiner Testtabelle anlegen konnte, die ebenfalls alle korrekt angezeigt werden ... Also ich weiß nicht ... |
AW: ZEOS select
Ungeachtet der Testreihen hier zu "wie viele Spalten gehen denn?" ist der Hinweis von p80286 das einzig vernünftige. (Exakt so protokollieren wir übrigens auch Messwerte die wir aus SPSen fischen ;)). Nur nicht den Index auf Datum und die Messtellen-ID vergessen, sonst wird's Suchen/Selecten darin nach ein paar zig Monaten recht gemütlich. Das ist dann flott, handlich, nicht so grenzenanfällig und zudem wohlgeformt.
|
AW: ZEOS select
Zitat:
Meine "Testreihen" dienten vor allem als Beleg dafür, daß der vom TE genannte Fehler nicht an irgend einer Begrenzung von MySQL oder Zeos liegt. Ich habe das gemacht, weil ich's genau wissen wollte. Dagegen ist doch hoffentlich nichts einzuwenden ... |
AW: ZEOS select
Ist es nicht, und ich kenne die von dir beschriebenen Situationen zu Genüge. Da ich aber befürchtete, dass der Hinweis auf die "best-practice" im letzten Beitrag auf der Seite versupmft, wollte ich das nur nochmals hervor heben. Gegebenenfalls besteht ja die Möglichkeit des Umbaus für den TE, oder es ist ein Tipp für sein nächstes Projekt, oder irgend jemandem, der den Thread in 2-4 Jahren hier mal mit einem ähnlichen Problem liest, ist mit etwas Glück früh genug geholfen es gleich richtig zu machen. Dagegen ist hoffentlich auch nichts einzuwenden ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz