Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 12:30   #1
-=pasha=-
Пользователь
 
Регистрация: 22.06.2010
Сообщений: 41
По умолчанию Add all Filds в Query

Добрый день. Подскажи пожалуйста можно ли реализовать мои задумки... Есть БД в аксессе подключена в делфи через ADO. Нужно в ADOQuery довавить(создать поля). Мышкой я могу это сделать. А программно это как-то реализовать можно?
-=pasha=- вне форума Ответить с цитированием
Старый 24.01.2011, 12:59   #2
Ev[G]eN
C / C++ / Java
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

в Delphi нет ни4его невозможного)
Ev[G]eN вне форума Ответить с цитированием
Старый 24.01.2011, 13:10   #3
-=pasha=-
Пользователь
 
Регистрация: 22.06.2010
Сообщений: 41
По умолчанию

В таком случае как это это сделать?
-=pasha=- вне форума Ответить с цитированием
Старый 24.01.2011, 13:59   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно. А Вам зачем?!
Дело в том, что если поля не вытащены в DesingTime в запрос - то вытягиваются те поля, которые есть в запросе в RunTime (ну, грубо говоря, что в данный момент запрос вернёт - то и вытягивается).
И после этого можно обращаться к этим полям (в т.ч. по имени поля).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2011, 14:09   #5
-=pasha=-
Пользователь
 
Регистрация: 22.06.2010
Сообщений: 41
По умолчанию

Ну у меня ситуация такая.На форме есть панелька на ней чекбоксы с названиями полей. Что отметил, то тянется в запрос. На основании этого запроса формируется отчет через fastreport. Все клево отчет формируется, только вот название полей в отчет тянется по английски. Если добавлять поля через диспетчер объектов, то у меня ошибка вылазит при формировании запроса.
-=pasha=- вне форума Ответить с цитированием
Старый 24.01.2011, 14:33   #6
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Все клево отчет формируется, только вот название полей в отчет тянется по английски
Вывод результата запроса дает поля в том порядке, в котором они перечислены в запросе.
Допустим, если результат отображаем в DBGrid, то мы спокойно можем, например, для самого первого поля с табличным именем "Number" назначить название в гриде по-русски:
Код:
DBGrid1.Columns[0].Title.Caption:='Номер';
Кто мешает сделать аналогично и для рипорта ?

Последний раз редактировалось asmodey1; 24.01.2011 в 20:44.
asmodey1 вне форума Ответить с цитированием
Старый 24.01.2011, 14:38   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
основании этого запроса формируется отчет через fastreport
а позвольте полюбопытсвовать, а каким образом? Неужели в рантайме отчёт создаёте? Позвольте тогда Ваш исходный код взглянуть..
всё равно, мне кажется, что не в ту сторону Вы копаете...

по сути, попробуйте, должно сработать:
Код:
with DataSet do
    begin
        with FieldDefs.AddFieldDef do
            begin
                DataType := ftFloat;
                Name := 'MARK_WEIGHT';
            end;
        with FieldDefs.AddFieldDef do
            begin
                DataType := ftString;
                Name := 'MARK_NAME';
                Size := 30;
            end;
     .....
end;

кстати, а если Вы добавляете руками в запрос одно поле. Потом CheckBox'ом выбираете только одно это поле - всё нормально работает? и название поля по русски в отчёте?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2011, 15:04   #8
-=pasha=-
Пользователь
 
Регистрация: 22.06.2010
Сообщений: 41
По умолчанию

Код:
procedure TForm12.Button1Click(Sender: TObject);
Var sql,ss:string;
    i,k,k1:integer;
begin
sql:='SELECT ';

  Memo1.Clear;
  //Считаем кол-во отмеченых чекбоксов на форме
  k:=0  ;
  for i := 0 to Form12.ComponentCount - 1 do
  begin
    if Form12.Components[i] is TCheckBox then
    begin
      if (Form12.Components[i] as TCheckBox).Checked = true then
      begin
        Inc(k);
       // Memo1.Lines.Add((Form12.Components[i] as TCheckBox).Caption+' = true');

      end;
    end;
  end;

 //Заносим поля в select
 k1:=0;
  for i := 0 to Form12.ComponentCount - 1 do
  begin
    if Form12.Components[i] is TCheckBox then
    begin
      if (Form12.Components[i] as TCheckBox).Checked = true then
      begin
        inc(k1);
        if k1<k then
        begin
          ss:= (Form12.Components[i] as TCheckBox).Name;
          //zamena(ss, '_', '.');
          sql:=sql+zamena(ss, '_', '.')+',' ;

        end;
        if k1=k then
        begin
          ss:= (Form12.Components[i] as TCheckBox).Name;
          //zamena(ss, '_', '.');
          sql:=sql+zamena(ss, '_', '.')+' ' ;
        end;
      end;
    end;
  end;
Memo1.Lines.Add('k= '+ IntToStr(k));
Memo1.Lines.Add('sql= '+sql);
//ss:='fz_fam';
Memo1.Lines.Add('zamena= '+zamena(ss, '_', '.'));
peremen;
sql:=sql+'FROM 2fiz_lica AS fz INNER JOIN 1ychet AS y ON fz.id_fiz_lica = y.id_fiz_lica';
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sql);
ADOQuery1.Active:=True;
 frxReport1.ShowReport;
 {frReport1.ShowReport;
 frReport1.ShowPreparedReport;  }
end;
Вот так у меня формируется запрос.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.01.2011 в 15:24.
-=pasha=- вне форума Ответить с цитированием
Старый 24.01.2011, 15:29   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

понятно. ну, очень легко переделать этот алгоритм под один проход.
да и с if k1<k then .. if k1=k then Вы зря намудрили - там же буквально просится такой упрощённый вариант:
Код:
      if (Form12.Components[i] as TCheckBox).Checked = true then
      begin
        inc(k1);
        ss:= (Form12.Components[i] as TCheckBox).Name;
        if k1<k then
          sql:=sql+zamena(ss, '_', '.')+',' 
        else
          sql:=sql+zamena(ss, '_', '.')+' ' ;
      end;

но это всё лирика.
А теперь расскажите, что у Вас в frxReport1.frx ?
Какие там поля?
p.s. если frxReport1 - не является секретным - запакуйте его в архив и выложите на форум... Любопытно взглянуть...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2011, 16:39   #10
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Не совсем проблема понятна, псевдонимы для названий полей легко назначать в запросе или в TfrxDBDataset, что программно, что в дизайнере это особых пробем не вызывает. Легче всего завести дополнительную таблицу в базе где будет указыватся имя таблицы, имя поля, и имя для отображения, кажется подобное делает FIBPlus
vovk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Worksheets.Add() Skif-F Microsoft Office Excel 12 29.09.2010 10:04
Сложение(Add) Rymbil Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 22.01.2010 10:24
SQL.add Grom48 БД в Delphi 2 13.12.2009 16:42
Проблема с LogList.Add mellon Помощь студентам 0 08.12.2009 21:17
add project lalilulelo Помощь студентам 3 26.05.2009 10:18