Thema: ZEOS select

Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#17

AW: ZEOS select

  Alt 26. Mär 2012, 20: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 20:24 Uhr)
  Mit Zitat antworten Zitat