Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Динамическое создание таблицы (https://forum.antichat.xyz/showthread.php?t=65944)

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 тоже работает, но с ошибками.


Время: 00:12