

Delphi - BDE - TQuery - tabuľka v pamäti
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, DBTables;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Query1: TQuery;
end;
var
Form1: TForm1;
Field1: TFloatField;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Query1 := TQuery.Create(Self);
Field1 := TFloatField.Create(nil);
Field1.FieldName := 'Cislo';
// Field1.Size := 5;
Field1.DisplayWidth := 5;
Field1.Precision := 2;
Query1.Fields.Add(Field1);
Query1.Active := True;
DataSource1.DataSet := Query1;
try
Query1.Append;
Query1.Fields[0].AsFloat := 10;
Query1.Post;
finally
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Query1.Free;
end;
end.
Čo robím zle? Ak povolím riadok Field1.Size, tak dostanem chybu, že je to chybná dĺžka, ak to nepovolím, tak pri Active := True dostanem "No SQL statement available". Keďže je tabuľka vytváraná v pamäti, tak jej fyzické meno neexistuje. Zrejme je chyba niekde v tom. Tiež by ma zaujímalo, čo s tou dĺžkou.
Pokud chces memory tabulku, jdes na to uplne spatne. Query slouzi pro vyber dat z existujici databaze. Ty potrebujes napr. ClientDataset z Delphi nebo stahnout kbMemTable, tusim, ze i v rx library je jedna memory tabulka.
Nie je to celkom tak. Ja chcem toto:
A neni jednodussi jit cestou:
Pokud neexistuje tabulka, zkopiruji ji z adresare, kde mam vychozi prazdne tabulky ?
Už som nad tým uvažoval, ale sa mi to riešenie veľmi nepáči. Zdá sa mi to také neprogramátorské. Chcel by som sa naučiť vytvoriť to programovo.
Jestliže chceš vytvořit programově tabulku, když není na disku přítomna, tak na to musíš takto:
Na form nebo TDataModule prskni TTable. V objektu TTable dvojklikem otevři Field editor a nadefinuj všechny potřebné fieldy (pravá packa myši v prostoru Field Editoru, vybrat Add Fields.. a dál už uvidíš). Dál dvojklikem na IndexDefs (v Object Inspectoru) obdobným způsobem vytvoř potřebné indexy. Nakonec nastav StoreDefs na TRUE a vhodně TableName a DatabaseName. V programu udělej něco podobného:
Takže všetko som urobil. Aj indexy pekne vo vizuále vytváram, ale ako zadám do položky TIndexDef.Fields vo vizuále dve položky naraz? Napríklad MENO, SIET? Ide o to, že neviem akým znakom oddeliť tie dve položky v reťazci.
Do pole Fields oddělíš jména sloupců středníkem. Například: "Prijmeni;Jmeno". Pozor, v BDE je drobná chyba: Ve všech indexech (mimo primárního) zaškrtní "ixCaseInsensitive" - i když se jedná třeba o číslo. Jinak to může při vytváření tabulky nebo při obnově indexů řvát neprávem chyby.
Ej a tu je problém. Ja potrebujem, aby to nemalo vlastnosť "case sensitive".
No však, [ixCaseInsensitive] znamená: ne "case sensitive".
To in mi trošku uniklo.
Všetko mi funguje, až na jeden nepochopiteľný detail. Na začiatku sa mi vytvorí tabuľka, ktorá na disku nie je a po ukončený programu ju na disku nájdem aj s obsahom. Po opätovnom spustení programu mi to prejde vetvou then a tabuľka je čistá:
DatabaseName som doteraz nastavené nemal, tak som to rýchlo nastavil na 'DBDEMOS', ale správa sa to rovnako.
Podivné. Já to dělám taky tak:
Zistil som, že vlastnosť Exist má stále hodnotu False.
Ak sa nebojíš mojich kódov, tak ti to asi pošlem. Ja som už nervy s tým stratil. Už som všetky vlastnosti prešiel aj 3x a nič.
Odoslané na: info@arkotechnik.cz
Tak jsem ti před chvílí majlem odpověděl.
Nejako ten mail mešká. Ale veď sa dočkám. Ďakujem.
Á doprde**.. Já si to z práce forwardoval domů a reply se poslalo zpátky do práce
. Už jsem to napravil. Příště mi posílej majl na rce@... (dál je to stejné jako jsi posílal). To mi přijde jak domů, tak i do práce a jen mě soukromě.
Síce meškal, ale práve dorazil, idem čítať, ešte raz ďakujem.
Nemáš za co.

Ďakujem. Pomohlo. A ja si môžem lámať hlavu. Môžem poprosiť o vysvetlenie významu DatabaseName? V helpe je napísané niečo v zmysle, že to určuje alias databázy alebo proste názov s akým vystupuje databáza, ale nerozumiem, čo to má spoločné s cestou.
Je to název databáze. V BDE je databáze řešena jako adresář, tudíž zde jde napsat cesta k datům. Je tu možno také uvést Alias databáze (zástupné jméno, zástupce pro označení toho adresáře), které je nadefinováno v BDE administrátoru (nebo API funkcema BDE - viz můj modul Rce_BDE).
Ďakujem, teraz už toto multirozvláknené vlákno hádam môžem uzavrieť.
Dobrá. Kdyžtak založ čerstvé vlákno na nový dotaz.
