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


Автор: Value 16.12.2005, 16:57
как при нажатю на кнопку radiobutton создать dbedit, с подключенным datasource и datafield?
или при выделении одной из radiobutton менялся датасурс и датафилд ?
Это вообще возможно ?

Автор: sexton 16.12.2005, 17:08
Думаю вполне можно обойтись вторым вариантом.
В обработчике OnClick RadioButton'a достаточно написать что-то вроде:
Код

DBEdit1.DataField = '';
DBEdit1.DataSource = DataSource1;
DBEdit1.DataField = 'NAME';

Автор: Value 16.12.2005, 18:01
ввёл только почему-то сейчас едит не реагирует на нажатие...

Автор: sexton 16.12.2005, 18:49
Странно.. у меня все работает... можешь код покажешь?

Автор: Value 17.12.2005, 07:21
Код
procedure TPaieskaForm.RadioButton1Click(Sender: TObject);
begin
 findedit.DataField:='';
findedit.DataSource:=datamodule2.AugalasSource;
findedit.DataField:='название растения на латыни';
end;

procedure TPaieskaForm.RadioButton2Click(Sender: TObject);
begin
findedit.DataField:='';
findedit.DataSource:=datamodule2.AugalasSource;
findedit.DataField:=' название растения ';
end;

procedure TPaieskaForm.RadioButton3Click(Sender: TObject);
begin
findedit.DataField:='';
findedit.DataSource:=datamodule2.SalysSource;
findedit.DataField:=' название страны ';
end;


и код на кнопку
Код
procedure TPaieskaForm.rodytibtnClick(Sender: TObject);
begin


datamodule2.LotQuery.active:=false;
datamodule2.LotQuery.SQL.Clear;
datamodule2.LotQuery.SQL.Add('select * ');
datamodule2.LotQuery.SQL.Add('from растение');
datamodule2.LotQuery.SQL.Add('where название растения по латыни like '''+FindEdit.text+'''');
datamodule2.LotQuery.Active:=true;
rezisvedform.ShowModal;
end;


мне показывает " Syntax error in SQL expression название растения по латыни '''' "
помогите с этим заодно, где тут проблема ?

Автор: kulikoff 17.12.2005, 08:34
Если используешь в именах кириллицу, то её надо брать в двойные кавычки, но лучше обойтись без русских букв! И ещё, все названия таблиц и алиасы надо брать в одинарные кавычки!!! smile

Автор: Value 18.12.2005, 15:10
ну двойные кавычки я ввёл, работает kulikoff спасибо, но почему едит не реагирует на нажатие ?

Автор: sexton 19.12.2005, 10:11
Я не совсем уверен, но по-моему дело в том, что у тебя DBEdit завязан на результат SELECTа, а такой Dataset не редактируемый... Попробуй в этом случае вместо Query использовать Table с фильтрацией...

Автор: Value 19.12.2005, 18:04
говорят что в ADO свойство filter плохо работает

Автор: sexton 19.12.2005, 18:28
А, значит все-таки ADO... Тогда все правильно делаешь. Св-во ReadOnly случайно не выставлено? Пример того как именно не реагирует можешь выложить? Потому что я проверял как раз на ADO, все у меня работало...

Автор: Value 19.12.2005, 19:30
всё исправил, у меня на едите функции onkeypress key:=#0 не взял в begin ... end так как 2 строки было...
ещё вопрос на нажатие кнопки
Код
if radiobutton1.checked=true then
begin
datamodule2.LotQuery.Active:=false;
datamodule2.LotQuery.SQL.Clear;
datamodule2.LotQuery.SQL.Add('select *');
datamodule2.LotQuery.SQL.Add('from rastenie')
datamodule2.LotQuery.SQL.Add('where "название растения по латыни " like '''+findedit.Text+''' ');
datamodule2.LotQuery.Active:=true;
rezisvedform.ShowModal;

вообщем такая фишка, когда я ввожу в едит искомое слово то происходит прикол с гридом,
а именно, radiobutton у меня наставлены на разные поля и при вводе слова при нажатии кнопки
введённое слово по заменяет первую запись в гриде (но только по искомому столбцу обозначенному по radiobutton), а остальные записи не меняются. короче и поиск не происходит и в гриде неизвестно что... smile

Автор: sexton 20.12.2005, 10:58
Ну так естественно! DBEdit предназначен как раз для редактирования!!! Если тебе надо поиск, то это совсем по-другому реализовывается - обычным Edit'ом и функциями поисками DataSet.

Автор: Value 20.12.2005, 14:19
Ну всё равно ни в какую не хочет искать у меня ничего....

Автор: sexton 20.12.2005, 15:12
Извини, конкретизируй плз, откуда что хочешь искать. А то у меня третий глаз устал smile

Автор: Value 20.12.2005, 15:25
smile да и у меня он устал, совсем измучился я с этим поиском уже 3 день сижу, всё сам пробую и не получается ничего...
вообщем когда я пишу SQL запрос то у меня не ищет....
добавляю к примеру чтобы сравнивал едит с таблицей :

if findedit.text = datamodule2.RastTable.fields.fields[0].asstring then
rezisvedform.showmodal;

, где rezisvedform это отдельная форма с отдельным гридом и dbimage,
в этом случае кнопка не работает....
подскажите код, а то я на грани паники

Автор: sexton 20.12.2005, 16:05
Думаю, сделать надо так.
1. Для ввода значения для поиска использовать обычный Edit. Для выбора поля - RadioButton (или простой ComboBox) со списком полей (у тебя ведь они все равно по-русски обозваны)
2. Для выборки значений, соответствующих заданным в поиске использовать запрос типа:
Код

datamodule2.LotQuery.active:=false;
datamodule2.LotQuery.SQL.Clear;
datamodule2.LotQuery.SQL.Add('select * ');
datamodule2.LotQuery.SQL.Add('from rastenie');
datamodule2.LotQuery.SQL.Add('where "' + radiobtn1.Caption + '" like '''+FindEdit.text+'''');
datamodule2.LotQuery.Active:=true;
rezisvedform.ShowModal;

3 (опционально). Форму с результатами создавать и удалять динамически.

Автор: Value 20.12.2005, 19:04
это ты предлагаешь сделать dll с создаваемой формой или можно по другому ?

Автор: sexton 21.12.2005, 10:12
Цитата(Value @ 20.12.2005, 19:04)
сделать dll с создаваемой формой

Да нет, что ты. Просто При нажатии кнопки форма создается, а при закрытии - уничтожается... Как это в делфях делается посмотри по FAQ-ам...
Что-то типа:
Код

with TForm1.Create(Application) do
  begin
     try
        ShowModal;
     finally
         Free;
     end;
  end;

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