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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 19:19   #1
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
Стрелка DBGridEh и непростой DBEdit

Доброго времени суток! Помогите пожалуйста разобраться. не могу додумать легкое казалось бы задание. есть таблица (я полями, требуется работа с полем допустим kod_op) и есть 18 штук dbedit'в. необходимо сделать так, чтобы в эти 18 штук вписать цифры и нажать кнопку "обновить"б при этом в таблице выйдет строка с полем kod_op. То есть это поле как раз содержит эти 18 символов.

вроде доступно объяснила, заранее большое спасибо!
p.s. иногда имеет значение база данных в коде и запросах. у меня бд fox

Последний раз редактировалось Регинка-малинка; 21.09.2010 в 19:23.
Регинка-малинка вне форума Ответить с цитированием
Старый 21.09.2010, 19:47   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

а зачем 18 то? одним никак не обойтись? и чем простой edit не прокатил ? зачем именно dbedit7
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 21.09.2010, 19:51   #3
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

можно и простой =) а 18, потому что код детали на предприятии из 18ти символов состоит, еще забЫла упомянуть...если допустим одно или нескольkо edit не заполнены, то поиск все равно должен произойти.

Последний раз редактировалось Регинка-малинка; 21.09.2010 в 20:11.
Регинка-малинка вне форума Ответить с цитированием
Старый 21.09.2010, 20:40   #4
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

И что? В одно поле 18 символов ввести нельзя?
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 21.09.2010, 20:50   #5
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

нет именно отдельно.
Регинка-малинка вне форума Ответить с цитированием
Старый 21.09.2010, 22:50   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
var s: string;

s:=Edit1.Text+Edit2.Text+ ....[и т.д]......... +Edit18.Text;
Table.Edit;
Table.FieldByName('kod_op').AsString:=s;
Table.Post;
Это что-ли? Или я чего-то недопонимаю...

Aаа, поиск нужен? Тогда так:
Код:
var s: string;

s:=Edit1.Text+Edit2.Text+ ....[и т.д]......... +Edit18.Text;
Table.Locate('kod_op',s,[loCaseInsensitive]);
или так
Код:
var s: string;

s:=Edit1.Text+Edit2.Text+ ....[и т.д]......... +Edit18.Text;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('Select * from Table_Name where kod_op ="'+s+'"');
Query.Open;

Последний раз редактировалось _SERGEYX_; 21.09.2010 в 22:58.
_SERGEYX_ вне форума Ответить с цитированием
Старый 22.09.2010, 18:07   #7
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

спасибо большое, но использовав этот пример, у меня теперь поиск по листбоксу
не получается. для наглядности я могу скинуть свой код и экранную форму для примера.
весь поиск и фильтры я добавляю в sql запрос, там видимо и ошибка.
Код:
procedure TForm1.FormShow(Sender: TObject);
var i: Integer;
begin
Q_podr.Active:=True;
DB_color.KeyValue:='--';
DB_ispol.KeyValue:='--';
//DB_date.KeyValue:='--';
    with Q_podr do
      begin
        i:=0;
        First;
        ChLB_podr.Clear;
        while not EOF do
        begin
          ChLB_podr.Items.Add(FieldByName('podrotpr').AsString);
          if ChB1.Checked then
            ChLB_podr.Checked[i]:=True
          else
            ChLB_podr.Checked[i]:=False;
          i:=i+1;
          next;
        end;
      end;
    Q_pol.Active:=True;
    with Q_pol do
      begin
        i:=0;
        First;
        ChLB_pol.Clear;
        while not EOF do
        begin
          ChLB_pol.Items.Add(FieldByName('podrpol').AsString);
          if ChB3.Checked then
            ChLB_pol.Checked[i]:=True
          else
            ChLB_pol.Checked[i]:=False;
          i:=i+1;
          next;
        end;
      end;
end;

procedure TForm1.ChB1Click(Sender: TObject);
begin
  Gi_lb:=1;
  tlb_updateLB.Click;
end;

procedure TForm1.ChB3Click(Sender: TObject);
begin
  Gi_lb:=2;
  tlb_updateLB.Click;
end;


procedure TForm1.tlb_updateClick(Sender: TObject);
 var
  i,k: Integer;
sort, fpodr, fpol, f, fcolor, fispol, fdate, s: String;
begin
Screen.Cursor:= crHourGlass;
     i:=0;
    while  i<DBGridEh1.Columns.Count do
    begin
      DBGridEh1.Columns[i].Title.SortMarker:=smNoneEh;
      i:=i+1;
    end;
    DBGridEh1.SortLocal:=False; //сбросить сортировку пользователя
    DBGridEh1.SortLocal:=True; //сброс произведен
  k:=ChLB_podr.Count;
  i:=0;
  fpodr:='';
      while i<k do
        begin
          if ChLB_podr.Checked[i] then
            if fpodr<>'' then   fpodr:=fpodr+''', '''+ChLB_podr.Items[i] else
              fpodr:=fpodr+ChLB_podr.Items[i];
          i:=i+1;
          next;
        end;
  k:=ChLB_pol.Count;
  i:=0;
  fpol:='';
      while i<k do
        begin
          if ChLB_pol.Checked[i] then
            if fpol<>'' then   fpol:=fpol+''', '''+ChLB_pol.Items[i] else
              fpol:=fpol+ChLB_pol.Items[i];
          i:=i+1;
          next;
        end;
        If ((fpol='') or (fpodr='')) then
        begin
          Screen.Cursor := crDefault;
          Gi_pol:=0;
          ShowMessage('Не все параметры запроса выбраны...');
          exit;
        end;
        Gi_pol:=1;
      if RG_sort1.ItemIndex=0 then
        sort:=', kod_map';
        if RG_sort1.ItemIndex=1 then
        sort:=', map';
      if RG_sort1.ItemIndex=2 then
      sort:=', name';
    fdate:='';
    fcolor:='';
    fispol:='';
    f:='';
    if DB_color.KeyValue<>null then
    if DB_color.KeyValue<>'--' then
    if DB_color.KeyValue<>'00' then
      fcolor:=' AND  (color = '''+DB_color.KeyValue+''')'
    else
      fcolor:='';
    if DB_ispol.KeyValue<>null then
    if DB_ispol.KeyValue<>'--' then
      fispol:=' AND (iif(empty(zispol),''01'',zispol) = '''
      +DB_ispol.KeyValue+''')'
    else
      fispol:='';
    if DB_date.KeyValue<>null then
    if DB_date.KeyValue<>'--' then
      fdate:=' AND  (date_pro = '''+DB_date.KeyValue+''')'
    else
     fdate:='';
    f:=fcolor+fispol;
    s:='';
    s:=E1.Text+E2.Text+E3.Text+E4.Text+E5.Text+E6.Text+E7.Text+E8.Text+
E9.Text+E10.Text+E11.Text+E12.Text+E13.Text+E14.Text+E15.Text+E16.Text+E17.Text+E18.Text;

      sql_khp.SQL.Text:='SELECT  kod_map, podrotpr, podrpol, name, map, nzah, 
zmf, kol, date_pro, num_pro, zstate, kod_op, color, zispol, zdateinput ' +
     ' from dd092010 where   map = '''+s+''' and podrotpr not like ("53%") and  kod_op not like ("65") and podrpol like ("53%") ' +
     ' '+f+
     ' ORDER BY podrotpr, podrpol ' + sort;
    if sql_khp.Active then sql_khp.Active:=False;
    sql_khp.Active:=True;

    Screen.Cursor:= crDefault;
  end;
procedure TForm1.tlb_printClick(Sender: TObject);
begin
 tlb_update.Click;
 if sql_khp.Active=false then exit;
 frxReport1.ShowReport;
end;
еще есть другие проблемы моего проекта =(
1. Listboxы токлом не взаимодействуют с таблицей, допустим если выбрать из одного листа "23903" и несколько из другого, он показывает не выборку, а просто все данные.
2. все таки решила сделать поиск по отрывку кода в отдельном edit, только не пойму как, чтобы допустим ввела туда "4" и сразу же вывелись все рез-ты где есть 4 ( столбец map).
3. Список с датой показывает ошибку неизвестного типа. Не могли бы вы сказать как показать в этом списке токо даты сентября 2010, на заметку эти данные у нас обновляются. то есть допустим завтра если оператор введет новую деталь с писке это число уже должно быть ( поле data_pro)
Изображения
Тип файла: jpg скрин1.jpg (69.3 Кб, 129 просмотров)

Последний раз редактировалось Stilet; 23.09.2010 в 09:15.
Регинка-малинка вне форума Ответить с цитированием
Старый 23.09.2010, 18:32   #8
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

помогите пожалуйста! я все никак не могу разобраться смогла сделать только поиск через edit1, но там не простой поиск нужен, у меня поиск по полю. Например есть поле со значением '1245', а мне нужно чтобы я ввела '12' и нашлись все другие возможные варианты
Регинка-малинка вне форума Ответить с цитированием
Старый 24.09.2010, 09:50   #9
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
есть поле со значением '1245', а мне нужно чтобы я ввела '12' и нашлись все другие возможные варианты
Код:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('Select * from aTable where Upper(aField) LIKE Upper("%' + Edit1.Text +'%")');
Query.Open

Последний раз редактировалось artemavd; 25.09.2010 в 14:56.
_SERGEYX_ вне форума Ответить с цитированием
Старый 25.09.2010, 14:17   #10
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

да спасибо, я тока по-своему немножко сделала, у меня потому что все рез-ты должны помещаться в запрос sql_khp, вот так:

Код:
 if Edit1.Text<>'' then
    s1:=' AND (map like "%'+Edit1.Text+ '%")'
      else
      s1:='';
//////////////////////////
sql_khp.SQL.Text:='SELECT  kod_map, podrotpr, podrpol, name, map, nzah, zmf, kol, date_pro, num_pro, zstate, kod_op, color, zispol, zdateinput ' +
     ' from dd092010 where  podrotpr not like ("53%") and  kod_op not like ("65") and podrpol like ("53%")' +
     ' '+f+s1+kod+
     ' ORDER BY podrotpr ' + sort;
оказывается все не так страшно, как думалось изначально )))). я сейчас не могу решить похожую задачу. например я поставила на форму 5 edit'ov. пользователь должен внести туда по одной цифре и нажать на кнопку "обновить", в итоге в таблице должна произвестись выборка по по полю map, который как раз содержит эти 5 символов, но уже в полном строковом варианте. я не понимаю как это сделать, пробовала использовать substring, но не помогает. то ошибку показывает то таблица пустая. вот мой неправильный код:
Код:
kod1:='SUBSTRING(map,2,1)';
    if E2.Text<>'' then
   kod:=' AND (map ="'+E2.Text+kod1+ '")'
   else
   kod:='';
это я сделала только для одного элемента пока, там нужен цикл, если для 5 edit

Последний раз редактировалось artemavd; 25.09.2010 в 14:53.
Регинка-малинка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать непростой поисковик для книги wirus2036 Microsoft Office Excel 27 09.02.2011 16:29
из datetimepicker в dbedit? Милана666 БД в Delphi 3 24.05.2010 20:58
баг с DBEdit samouelson БД в Delphi 1 19.12.2009 00:20
Значение в DBEdit artemavd БД в Delphi 1 15.05.2009 18:17
DBEdit TaTT DoGG Компоненты Delphi 5 19.05.2008 13:18