Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизEdit Найти похожие ветки
← →
assassin8899 (2008-05-28 21:13) [0]Иемеется таблица дочерняя ADOTable в которую заносится новая запись(ADOTable.Append) через dbEdit"ы.Вместо того чтобы вводить внешний ключ id в эту же таблицу через DBEdit я создаю edit и задаю метод
procedure TForm2.Edit1Change(Sender: TObject);
var a:integer;
begin
datamodule1.ADOQuery1.SQL.Text:="SELECT ID_вид, Название"+
" FROM Вид where Название like ""+edit1.Text+"%"";//результат запроса родительской таблицы
Datamodule1.ADOQuery1.Active:=true;
a:=datamodule1.ADOQuery1.FieldValues["ID_вид"];//присаеваем id родительской таблицы в переменную
datamodule1.ADOTable6.Fields.Fields[13].AsInteger:=a;//приссваиваем в дочернюю
то есть я делаю запрос который врезультате отображается в DBGrid(что то вроде словаря) в зависимрости от значения вводимого в edit.Этот запрос значения родительской таблицы.Далее я присваиваю буферной переменной "a" значение id ключа запроса родительской таблице и этот ключ присваиваю уже в дочернюю таблицу.
Проблема в том что если при вводе в edit ввести значение которого в результате запроса нет(даже если при вводе ошибится на одну букву) то выпадает ошибка что то проде:
← →
assassin8899 (2008-05-29 02:47) [1]в событии EditChange я оставляю только
datamodule1.ADOQuery1.SQL.Text:="SELECT ID_вид, Название"+
" FROM Вид where Название like ""+edit1.Text+"%"";//результат запроса родительской таблицы
Datamodule1.ADOQuery1.Active:=true;
далее в событии edit"а ONkeyPress пишу
procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
chr(13):dbgrid1.SetFocus;
end;
end;
Тогда я ввожу значение в edit уже без риска ошибки и перехожу по клавише Enter непосредственно в dbGrid, где имеется нужный результат запроса,а вот далее я хочу чтобы при нажатии на клавишу ENTER выделенной строки DBGrid"а edit"у присваивалось значение этой строки dbgrid"а, то есть
edit1.Text:=dbgrid1.Fields[1].AsString;
и соответвенно когда уже в edit будет 100% значение которое имеется в запросе должно происходить присвоение
a:=datamodule1.ADOQuery1.FieldValues["ID_вид"];
datamodule1.ADOTable6.Fields.Fields[13].AsInteger:=a;
Вот только вопрос в том, я не знаю как запихнуть последние три строчки кода, чтобы все это работало по нажатию Enter в DBGrid.
← →
Sergey13 © (2008-05-29 08:17) [2]Если ты вводишь данные в ДОЧЕРНЮЮ таблицу, то наверное у тебя перед глазами есть и ГЛАВНАЯ, к ТЕКУЩЕЙ записи которой ты и вводишь связанные данные? Если так, то логично просто прочитать ТЕРУЩЕЕ значение ИД главной таблицы.
← →
assassin8899 (2008-05-29 09:42) [3]<<Если ты вводишь данные в ДОЧЕРНЮЮ таблицу, то наверное у тебя перед глазами есть и ГЛАВНАЯ, к ТЕКУЩЕЙ записи которой ты и вводишь связанные данные? Если так, то логично просто прочитать ТЕРУЩЕЕ значение ИД главной таблицы.
Нет.У меня вообще нет отображений таблиц.Пользователь не должен смотреть значение из одной таблицы чтобы добавить в другую(а вданном случае это еще и внешние id).Это просто неудобно да и неправавильно.
Пользовательвводит все значения в dbEdit"ы а значение из главной таблицы,как я упоминал, берутся из словаря, то есть sql запроса.
← →
Sergey13 © (2008-05-29 09:54) [4]> [3] assassin8899 (29.05.08 09:42)
Что-то уж шибко аскетичный у тебя интерфейс получается, ИМХО.
> Пользователь не должен смотреть значение из одной таблицы
> чтобы добавить в другую(а вданном случае это еще и внешние
> id).Это просто неудобно да и неправавильно.
Он должен видеть к чему вводит уточняющую информацию. ИМХО. Это нормальая эргономика. Зачем пользователя делать слепым?
В твоем случае, что мешает тебе, если твой запрос не вернул искомых записей (или вернул несколько - вдруг) сказать об этом пользователю и заставить его повторить ввод.
Кстати
> datamodule1.ADOQuery1.SQL.Text:="SELECT ID_вид, Название"+
> " FROM Вид where Название like ""+edit1.Text+"%"";//результат запроса родительской таблицы
Во первых в таком случае следует использовать параметры вместо перезаписывания текста запроса.
Во вторых, я не знаю что у тебя за СУБД (подозреваю, что аксес, но не уверен), но наверное неплохо бы как то предварительно обработать edit1.Text, типа к определенному регистру привести, проверить на пустоту и т.п.
← →
ANB (2008-05-29 10:00) [5]1. Выброси свой обработчик. Обращение к справочнику (кистате, это у тебя ни фига не родительская таблица) сделай непосредственно при сохранении записи в основную таблицу (которая у тебя тоже ни фига не дочерняя).
← →
Плохиш © (2008-05-29 10:29) [6]
> Проблема в том что если при вводе в edit ввести значение
> которого в результате запроса нет(даже если при вводе ошибится
> на одну букву) то выпадает ошибка что то проде:
Проверять надо набор данных на наличие этих данных, а не тупо пытаться что-то из пустого набора данных захапать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c