Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Словари для таблицы из массива


Автор: Dmitriy84s 18.8.2008, 18:50
Задача:
 в mysql таблице хранятся данные ввиде индексов (только цифры)
 все словари находятся в массиве 
 
Код

a[1]:='Куплю';
a[2]:='Продам';
a[3]:='Обменяю';
a[4]:='Сдам';

Как сделать так чтобы в ДБГриде вместо цифр появились значения из этого массива.

Автор: KotBegemotKlg 18.8.2008, 22:32
Для начала надо понять, как связать массив и таблицу БД. Один из вариантов - создать двумерный массив, в первом столбце которого будут ID из базы а во втором - твои названия.
Затем, для каждой записи из базы нужно произвести поиск в первом столбце массива и вернуть значение второго столбца, которое и отобразить в гриде (например как calculated поле датасета).

Автор: Poseidon 19.8.2008, 12:01
Цитата(Dmitriy84s @  18.8.2008,  18:50 Найти цитируемый пост)
Как сделать так чтобы в ДБГриде вместо цифр появились значения из этого массива.
В ДБГриде - никак. Можешь использовать обычный СтрингГрид. Получать данные из базы, "конвертировать" в слова при помощи массива и выводить в грид.

Автор: morpheyushka 19.8.2008, 13:13
Ага, по скольку это словарь, то 10 000 записей в таблице вполне может быть.
Интересно, пользователь не уснет пока ему все это выведут smile 

Автор: Dmitriy84s 19.8.2008, 16:25
Вообще возможно массив в dll кинуть и потом из проги вызывать его, а то уж больно код здоровый выходит....

Автор: remax 20.8.2008, 02:51
в датасет добавить "вычисляемое поле", в котором определить метод gettext. в дб грид выводить именно вычисляемое поле (исходное - можно выводить, но лучше спрятать).


но, лучше всего этот селект сделать средствами СУБД, а не клиентской проги. хотя, если массив маленький, то и так сойдет.

например
kod - поле с кодом из базы
yyy - вычисляемое поле

тогда, в примитиве, без проверок будет выглядеть так:
Код

procedure TForm1.Table1yyyGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
   text:=a[table1kod.asinteger];
end;

Автор: Dmitriy84s 20.8.2008, 09:53
нужна помощь.....этот массив нужно кинуть в dll...кто-нить знает как это сделать?

Код

var
    //A:array[1..4] of string[7];//Вид операций
    s:integer;

Type
    AA=array[1..5] of string[8];
    Const A:AA=('Продадим','Купим','Снимем','Сдадим','Обмен');  
begin
         { a[1]:='Куплю';
          a[2]:='Продам';
          a[3]:='Обменяю';
          a[4]:='Сдам'; }
          myquery1.ReadOnly:=false;
          s:=strtoint(myquery1.Fields.FieldByName('operation_type').AsString);
          myquery1.Fields.FieldByName('operation').Value:=A[s];
end;

Автор: remax 20.8.2008, 11:31
Цитата(Dmitriy84s @ 20.8.2008,  09:53)
.....этот массив нужно кинуть в dll...

а зачем?

Автор: Dmitriy84s 20.8.2008, 11:37
эт только маленькая часть огромного массива...чтобы все не хранить в запуском файле......размер меньше будет

Автор: morpheyushka 20.8.2008, 18:13
Зачем dll. Если куда нибудь хочешь запихнуть свой массив и если он не изменяется, то добавь в проект модуль *.pas, обзови его типа MyConst.pas и засунь в него свой массив. По крайней мере ничего таскать за программой не придется smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)