Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1211821514
DJ_UZer
2008-05-26 21:05
2008.06.22
Добавить ссылку в меню файла "отправить"


2-1212024373
AlexAA
2008-05-29 05:26
2008.06.22
Работа с камерой


15-1210520423
Alexey
2008-05-11 19:40
2008.06.22
Ошибка при запуске Delphi


15-1210582367
student_iz_muroma
2008-05-12 12:52
2008.06.22
транслятор подмножества языка Pyton на Delphi


15-1210430194
SKIPtr
2008-05-10 18:36
2008.06.22
на новом компе не хотят работать некоторые программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский