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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 22:00   #1
mmihan
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 30
Вопрос Поиск по Базе , Locate

Доброго времени суток!

Кликая по строке в Dbgrid Открываться Форма с Edit, если в поле 'Закрыто' True (1) булево значение, условие выполняется , то Edit не дается редактироваться.

в MSSQL Тип данных в поле 'Закрыто' Булево... если cделать запрос то отображается '1' ,в Dbgrid отображается как 'True ' запись в поле 'Закрыто' чекбоксом
Код:
mform.ADOTable1.FieldByName('Закрыта').AsBoolean:=true;
не помогу понять что не так .. пробовал разными вариантами
пробовал в KeyValues и Труе и 1

Почему то всегда ((((, выполняется "ShowForm.Edit2.ReadOnly:=true; "
Код:
procedure TMform.DBGrid1DblClick(Sender: TObject);

begin

ADOQuery1.Close; {деактивируем запрос в качестве одной из мер предосторожности}
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select Закрыта');
ADOQuery1.SQL.Add('from Клиент');
ADOQuery1.Open;

 if  ADOQuery1.Locate('Закрыта',True,[]) then begin

ShowForm.Edit2.ReadOnly:=true;
....
end
else
ShowForm.Edit2.ReadOnly:=false;
....

 begin
   Showform.EDIT1.Text := DBGrid1.DataSource.DataSet.FieldByName('КЛ').AsString;
.......
   showForm.ShowModal;
 end
end;

Последний раз редактировалось mmihan; 05.12.2011 в 22:31.
mmihan вне форума Ответить с цитированием
Старый 06.12.2011, 08:09   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Если я вас правильно понял, выхотите при клике на запись проверить поле "Закрыта", тогда может вам это условие
Код:
 if  ADOQuery1.Locate('Закрыта',True,[]) then begin
изменить на такое
Код:
if ADOQuery1.FieldByName('Закрыта').AsBoolean then begin

Последний раз редактировалось SERG1980; 06.12.2011 в 08:11.
SERG1980 вне форума Ответить с цитированием
Старый 06.12.2011, 08:15   #3
mmihan
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 30
По умолчанию

да, На содержание записи "True" (1) В Поле 'Запись' , сейчас попробую
mmihan вне форума Ответить с цитированием
Старый 06.12.2011, 08:27   #4
mmihan
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 30
По умолчанию

Не выходит.. пробовал приравнивать к True.. теперь выполняется всегда условие после esle ...

Последний раз редактировалось mmihan; 06.12.2011 в 08:33.
mmihan вне форума Ответить с цитированием
Старый 06.12.2011, 09:11   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А вы для проверки сделайте поле "закрыта" видимым и кликайте по записи, и тогда будет ясно работает у вас условие или нет или проект покажите. Да и на какой датасет(DataSource) настроен DBGrid

Последний раз редактировалось SERG1980; 06.12.2011 в 09:14.
SERG1980 вне форума Ответить с цитированием
Старый 06.12.2011, 09:39   #6
mmihan
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 30
По умолчанию

Для отображение Стоит .. поле.
Prog.rar

login sa
pass sa

Последний раз редактировалось mmihan; 06.12.2011 в 09:57.
mmihan вне форума Ответить с цитированием
Старый 06.12.2011, 09:46   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Кликая по строке в Dbgrid Открываться Форма с Edit, если в поле 'Закрыто' True (1) булево значение,
Цитата:
Код:
ADOQuery1.Close; {деактивируем запрос в качестве одной из мер предосторожности}
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select Закрыта');
ADOQuery1.SQL.Add('from Клиент');
ADOQuery1.Open;
Набор в DBGrid тот же или это другой набор?
Если тот же то вы сбили текущую запись.
Если другой то вы забыли выставить нужную (согласованную с набором в DBgrid).
в любом случае вы всегда проверяете первую запись. А ее состояние всегда одинаково.
Цитата:
теперь выполняется всегда условие после esle ...
поскольку у вас ADOQuery1, то добавтьте в запрос условие WHERE для выбора только одной нужной записи.
Код:
ADOQuery1.SQL.text:=''Select Закрыта  from Клиент where .......';
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.12.2011 в 09:50.
evg_m вне форума Ответить с цитированием
Старый 06.12.2011, 09:55   #8
mmihan
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 30
По умолчанию

в Dbgrid Другой
mmihan вне форума Ответить с цитированием
Старый 06.12.2011, 10:00   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

ADOQuery1.SQL.text:=''Select Закрыта from Клиент where IDREC =.......';
ключ поиска должен быть idrec поле уникальный идентификатор записи, но не закрыта поле признак состояния записи.
P.S. То же самое верно для вашего первого варианта с Locate.
Искать надо не первую закрытую запись
Код:
Locate('закрыта', true, )
а запись с тем же ключом (идентификатором)
Код:
Locate('IDREC', dbgrid.datasource.Dataset.fieldbyname('id').asinteger);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.12.2011 в 10:05.
evg_m вне форума Ответить с цитированием
Старый 06.12.2011, 10:56   #10
mmihan
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 30
По умолчанию

а не подскажите почему при компиляции возникает ошибка ?
Код:
if ADOQuery1.Locate('True', dbgrid1.datasource.Dataset.fieldbyname('Закрыта').asinteger)then    begin

Последний раз редактировалось mmihan; 06.12.2011 в 11:11.
mmihan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск Locate по нескольким полям athleet Общие вопросы Delphi 5 22.05.2011 15:34
ADOtable Locate поиск приблеженный MrMorozko БД в Delphi 2 28.04.2011 15:37
Grid и поиск Locate amator_roma БД в Delphi 5 03.12.2010 13:35
поиск единственной записи через locate ИВэТэшка Помощь студентам 3 10.04.2009 15:21
Поиск по базе Антон Шестаков БД в Delphi 1 22.01.2008 20:32