AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ZEOS select

Ein Thema von jangbu · begonnen am 26. Mär 2012 · letzter Beitrag vom 26. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#1

ZEOS select

  Alt 26. Mär 2012, 14:49
Datenbank: MySQL5 • Version: 5.5.19 • Zugriff über: ZEOS
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;
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: ZEOS select

  Alt 26. Mär 2012, 15:01
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: ZEOS select

  Alt 26. Mär 2012, 15:52

begin
ZConnection1.Connected := true;
ZQuery1.Close;
ZQuery1.SQL.Clear;
SQL_str := 'select * from my.Trock';
ZQuery1.SQL.Text := sql_str;
ZQuery1.Open;
end;
das würde ich zu
Delphi-Quellcode:
begin
  ZConnection1.Connected := true;
  ZQuery1.Close;
  ZQuery1.SQL.Text:='select * from my.Trock';
  ZQuery1.Open;
end;
machen.

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: ZEOS select

  Alt 26. Mär 2012, 16:15
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.874 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ZEOS select

  Alt 26. Mär 2012, 16:17
Es scheint sich ja um ein nicht normalsiertes Datenbankschema zu handeln
Markus Kinzler
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: ZEOS select

  Alt 26. Mär 2012, 16:25
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.874 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: ZEOS select

  Alt 26. Mär 2012, 16:27
Bei einem normalsierten Schema ist eine deart große Anzahl von Spalten aber fast ausgeschlossen.
Markus Kinzler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: ZEOS select

  Alt 26. Mär 2012, 18:50
... die Probleme die ich beim update,select habe mit der Anzahl der Datenbankfelder zu tun haben ...
Ich hab jetzt mal kurz in einer MySQL-Testtabelle 800 Felder vom Typ INT angelegt. Die werden im DBGrid korrekt angezeigt ... Ich kann dein Problem nicht nachvollziehen ...

MySQL-Version: 5.5
Zeos-Version: 7.0.0-dev
Delphi-Version: 2009 pro
Windows-Version: XP Pro
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#9

AW: ZEOS select

  Alt 26. Mär 2012, 18:53
Das könnte am 7er ZEOS liegen, da soll sich ja einiges getan haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: ZEOS select

  Alt 26. Mär 2012, 19:03
Das könnte am 7er ZEOS liegen, da soll sich ja einiges getan haben.
Leider hat der TE nicht angegeben, welche ZEOS-Version er verwendet. Dabei kann man sich zahlreiche Komponenten via SVN automatisch aktuell halten.

@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:
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 + ' FLOATELSE
             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.
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 ...

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 ...

Geändert von Perlsau (26. Mär 2012 um 19:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 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