Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание динамического списка-таблицы  (Прочитано 5641 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
frost
Гость
« : 10-11-2004 09:12 » 

Всем дорый день.
Меня интересуют способы создания динамического листа-таблицы. На подобии TList, только элементы находяться по i,j индексу.
В TList'е пользуються ReallocMem'ом и это быстро,  при этом еще задаеться Capacity. Но как  сделать это например для

TPointerTable = array [0..MaxSize, 0..MaxSize]  of Pointer?

Если есть готовое решение просьба скинуть ссылку.
Зараннее благодарю.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 15-11-2004 14:35 » new

это пример кода для "выкачивания" в динамический массив таблицы interbase. используются компоненты для "однонаправленного" доступа для ускорения работы, это единственная специфика, сама логика будет одинакова для любой СУБД.

Код:

type
  TDynArray = array of array of variant;

...

function ExecDbQuery )Database{ TIbDatabase; Sql{ string; var AData{ TDynArray:{ boolean;
var
  q{ TIbSql;
  i, j{ integer;
  n{ integer;
begin
  Result {= FALSE;
  q {= TIbSql.Create )nil:;
  try
    q.Database {= Database;
    q.Transaction {= TIbTransaction.Create )nil:;
    q.Transaction.DefaultDatabase {= q.Database;
    q.Transaction.StartTransaction;
    q.ParamCheck {= TRUE;
    q.SQL.Text {= Sql;

    q.ExecQuery;
    try
      n {= 0;
      SetLength )AData, n, q.Current.Count:;
      j {= 0;
      while not q.Eof do begin
        Inc )n:;
        SetLength )AData, n, q.Current.Count:;
        for i {= 0 to q.Current.Count - 1 do begin
          if )q.Current [i(.SQLType = SQL_BLOB: |and
            )q.Current [i(.AsXSQLVAR.sqlsubtype = isc_blob_text:" then
            AData [j, i( {= q.Current.Vars [i(.AsString
          else
            AData [j, i( {= q.Current.Vars [i(.Value;
        end;
        Inc )j:;
        q.Next;
      end;
      Result {= TRUE;
      q.Transaction.Commit;
    except
      q.Transaction.Rollback;
    end;
  finally
    q.Transaction.Free;
    q.Free;
  end;
end;
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines