PDA

Просмотр полной версии : Динамическое создание таблицы


AleksP
30.03.2008, 22:11
Таблица формируется динамически. Необходимо упорядочить строки таблицы по одному из столбцов.

1) Можно ли сформировать таблицу, сразу используя компонент TQuery?
2) Как можно это сделать, если использовать компонет TTable? Есть ли другие возможности, кроме TTable->TDataSource->TQuery->TDataSource?

De-visible
30.03.2008, 22:24
delphi?
Если да то вот:

unit gridcalc;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, DB,
DBTables, StdCtrls;

type

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure TaxAmountCalc(DataSet: TDataset);
private
TaxAmount: TFloatField;
end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.TaxAmountCalc(DataSet: TDataset);
begin

Dataset['TaxAmount'] := Dataset['ItemsTotal'] *
(Dataset['TaxRate'] / 100);
end;

procedure TForm1.FormCreate(Sender: TObject);
var

MyTable: TTable;
MyDataSource: TDataSource;
MyGrid: TDBGrid;
begin

MyTable := TTable.Create(Self);

with MyTable do
begin
DatabaseName := 'DBDemos';
TableName := 'Test.DB';
OnCalcFields := TaxAmountCalc;

with FieldDefs do
begin
Add('ItemsTotal', ftCurrency, 0, false);
FieldDefs[0].CreateField(MyTable);
Add('TaxRate', ftFloat, 0, false);
FieldDefs[1].CreateField(MyTable);
TFloatField(Fields[1]).DisplayFormat := '##.0%';
TaxAmount := TFloatField.Create(MyTable);

with TaxAmount do
begin
FieldName := 'TaxAmount';
Calculated := True;
Currency := True;
DataSet := MyTable;
Name := MyTable.Name + FieldName;
MyTable.FieldDefs.Add(Name, ftFloat, 0, false);
end;
end;
MyTable.CreateTable;
end;

MyDataSource := TDataSource.Create(Self);
MyDataSource.DataSet := MyTable;
MyGrid := TDBGrid.Create(Self);

with MyGrid do
begin
Parent := Self;
Align := alClient;
DataSource := MyDataSource;
end;

MyTable.Active := True;
Caption := 'Новая таблица ' + MyTable.TableName;
end;

end.

Вот ссылка на полную статью _http://www.delphisources.ru/pages/faq/base/create_table_and_fields.html
-----------------------------------------
_http://www.traktat.ru/tr/referats/id.11631.html - реферат на эти компоненты
------------------------------------------
Если Borland C++ Builder:
_http://inprise.narod.ru/cbuilder/archives/bcba/book.cgi_book_cbuilder_i_943366575.html

AleksP
30.03.2008, 22:56
C++ Builder. А как упорядочить таблицу?

AleksP
06.04.2008, 22:06
Можно привести код, который формирует таблицу с использованием компонента TQuery?

Попробовал два варианта, но оба выдают ошибку.
Первый вариант:

Query1->Close();
Query1->DatabaseName="c:\\";
Query1->SQL->Clear();
Query1->SQL->Text = "CREATE TABLE \"Table1.db\" (field1 int,field2 int)";
Query1->ExecSQL();

Query1->SQL->Clear();
Query1->SQL->Text = "INSERT INTO \"Table1.db\" (field1, field2) VALUES (10,20)";
Query1->ExecSQL();

Query1->Active = true;

выдает сообщение об ошибке "Error creating cursor handle".

Второй вариант:

Query1->Close();
Query1->DatabaseName="c:\\";
Query1->SQL->Clear();
Query1->SQL->Add("CREATE TABLE \"Table1.db\" (field1 int,field2 int)");
Query1->ExecSQL();
Query1->SQL->Clear();
Query1->SQL->Add("INSERT INTO \"Table1.db\" (field1, field2) VALUES (10,20)");
Query1->Open();

выдает сообщение об ошибке "Insufficient memory for this operation".

o_OBallers
07.04.2008, 13:26
У тебя какой подход к делу если Jet и access то там безошибочно выполняется, только выборка, insert тоже работает, но с ошибками.