Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85

DBGrid ошибка при работе

16.05.2013, 16:19. Показов 1418. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
У меня возникла проблема такого рода: Есть форма с таблицой Заказ. Эта таблица связана еще с 3 (Мастер, Изделие, Заказчик-СУБД Ms SQL Server 2000). Изначально для табл.Заказ в ADOQuery был прописан простой запрос на выборку
T-SQL
1
SELECT * FROM Zakaz
С которым все работало. Позже я его заменил на другой запрос, который позволяет пользователю вместо ключей(ID) видеть названия(фамилии, наименования и тд)
T-SQL
1
2
3
4
5
SELECT zk.Naimen_zakazchika , ms.FIO_Mastera , iz.Nazvanie_modeli ,z.Nomer_zakaza, z.Data_zakaza, z.Data_ispolnenya , z.Cena, z.Kol_vo , z.Summa 
FROM Zakaz z 
JOIN  Zakazchik zk  ON z.ID_zakazchika=zk.ID_zakazchika 
JOIN  Master ms  ON z.Tabel_nomer=ms.Tabel_nomer
JOIN Izdelie   iz ON z.Nomer_modeli=iz.Nomer_modeli
. После этого у меня начались проблемы с добавлением/удалением/изменением записей. При нажатии на кнопку "добавить" открывается форма(см.рис) но выбрать я из неё ничего не могу, списки выпадают но не выбираются. И если нажимаю кнопку "ок" выдает следующую ошибку(см.рис.). Удалить строку так же не могу(см.рис delete). Позже обнаружил проблему с удалением на форме с табл.Изделие (рис.ups).
p.s. я плохо разбираюсь в программирование, пожалуйста, объясните как исправить ошибку
Миниатюры
DBGrid ошибка при работе   DBGrid ошибка при работе   DBGrid ошибка при работе  

DBGrid ошибка при работе   DBGrid ошибка при работе  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2013, 16:19
Ответы с готовыми решениями:

Ошибка при сортировке dbgrid
народ проверьте пожалуйста код, на форме SortCB(combobox)(по какому полю будет сортировка), SortByCB(combobox)(в какую сторону сортировка...

Ошибка при поиске в DBGrid
Здравствуйте, вот столкнулся с такой проблемой: в гриде ищу запись и перехожу на нее по следующему коду: ...

Ошибка при работе с БД
Работа с БД

14
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.05.2013, 16:36
ADO не может определить, в какую таблицу добавлять (редактировать, удалять) данные. Либо сами пишите sql-запросы для этого (INSERT INTO, UPPEND или DELETE), а затем обновляйте данные вашего основного запроса, либо оставьте первоначальный запрос к одной таблице, а все остальные поля подключите как поля LookUp.
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
16.05.2013, 16:58  [ТС]
то есть необходимо каждый раз писать запрос? Вы не могли бы подробней объяснить...
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.05.2013, 17:13
Цитата Сообщение от Elizium33 Посмотреть сообщение
необходимо каждый раз писать запрос?
Да. Пока в вашем запросе присутствовала одна таблица - ADO знал, с какой таблицей ему работать. Когда появилось несколько - ADO не знает. Один ADOQuery нужен для отображения данных, другой для манипуляций с записями. Теперь вместо ваших
Delphi
1
2
ADOQuery1.Insert;
...
и т.д. пишите sql запросы к базе данных типа
SQL
1
INSERT INTO zakaz ...
и выполняете их
Delphi
1
2
...
ADOQuery2.ExecSQL;
Добавлено через 2 минуты
Но, повторюсь, вам наверное легче использовать LookUp поля.
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
16.05.2013, 17:31  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
легче использовать LookUp поля.
-это DBLookupComboBox или я путаю? Просто я не знаю еще вариант как сделать что бы пользователь видел в DBGrid именно наименования, а не ключи. А так у меня было что пользователь видел их при добавлении
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.05.2013, 17:44
Цитата Сообщение от Elizium33 Посмотреть сообщение
это DBLookupComboBox или я путаю?
нет, это совсем другое. Вы оставляете ваш запрос к одной таблице, а необходимые поля подключаете из других DataSet'ов по кодовому полю. И в итоге будете видеть так, как хотите и не нужно будет менять код. Выложите программу на форум, а я покажу как это делается.
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
16.05.2013, 17:58  [ТС]
Посмотрите, там конечно все через одно место сделано... А бэкап базы нужен?
Вложения
Тип файла: rar проект.rar (703.2 Кб, 17 просмотров)
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.05.2013, 18:18
Elizium33, выберите на вашем DataModule1 ADOQuery3 и 2 раза на нем клацните. Откроется пустое окошко. В контекстном меню выберите пункт "Add all fields". Затем выберите ADOQuery4 (сделайте первоначальный запрос к одной таблице) и 2 раза на нем клацните + "Add all fields". Затем из контекстного меню выберите "New Field" - появится форма с полями. В ней установите вид поля LookUp, ключевое поле, по которому будет осуществлена связь (Key Fields), DataSet (который ADOQuery3), ключевое поле в этом DataSet'e (LookUp Keys) и поле, которое будет отображаться (Result Field). Затем заполните наименование поля (Name, можно назвать так же, как оно называется в ADOQuery3) и установите тип String и жмите <Ok>. И не забудьте добавить новое поле в DBGrid.
1
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
16.05.2013, 18:32  [ТС]
таким же методом можно сделать что бы отображались название изделий и фио мастеров, а скрыть через DBGrid1.Columns?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.05.2013, 18:33
Elizium33, совершенно верно. А поля с кодами просто в DBGride не отображать (вообще убрать их из списка полей).
1
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
16.05.2013, 18:43  [ТС]
Waddonator, сделал, отображает как надо. Но теперь жму "добавить" выбираю в DBLookupComboBox из списка кого-нибудь и выдает ошибку
Миниатюры
DBGrid ошибка при работе  
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
16.05.2013, 19:02
Цитата Сообщение от Elizium33 Посмотреть сообщение
Но теперь жму "добавить" выбираю в DBLookupComboBox из списка кого-нибудь и выдает ошибку
ранее вы не говорили, что используете этот компонент. Он действительно конфликтует с ключевыми полями полей LookUp. Значит вам такой вариант не подойдет. Либо используйте запросы для добавления/редактирования, либо отказывайтесь от DBLookupComboBox.
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
16.05.2013, 19:10  [ТС]
до того как отображались и ключи и поля LookUp работало ок. а как можно сделать выпадающий список? я изменил в настройках DBLookupComboBox'в ошибка пропала, но стал ругаться на DBEdit'ы

Добавлено через 2 минуты
подскажите, пожалуйста, как лучше сделать?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
17.05.2013, 10:46
Elizium33, Вместо DBEdit'ов положите обычные Edit'ы и заполняйте их при открытии формы (событие формы OnShow). Т.е. если идет добавление новой записи - все эдиты пустые, если редактирование - заполняете даннфыми текущей записи.
Вместо DBLookupComboBox'ов - обычные ComboBox'ы. Аналогично заполняете. Если идет добавление новой записи - ItemIndex:=0, при делактировании - устанавливаете нужный.
Во время выхода при нажатии кнопки кнопки <Ok> - добавляете или редактируете (отличается одной строкой Insert или Edit), а если нажата кнопка <отмена> просто закрываете данную форму.
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
17.05.2013, 17:37  [ТС]
Waddonator, извините за наглость, но Вы не могли бы исправить в моём проекте это?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2013, 17:37
Помогаю со студенческими работами здесь

Ошибка при выводе в DBgrid, ADO
На форме стоит стоит два Dblookupcombobox`a со значением цех и станок, цех связан со станками мастерфилдом, тобишь при выборе цеха...в...

Ошибка при работе генератора
У меня в таблице используется генератор, который автоматом проставляет номера строк. Если я добавляю какую-то запись и, допустим, случайно...

DBGridEh ошибка при работе
Доброго времени суток! У меня возникла проблема с Dbgrideh-ом. Когда я хочу перенести мышью на следующую строку или сохранить или...

Ошибка при работе с Firebird 2.1
Здравствуйте! Такая проблема..... Выполняю код: //Сохраняем нужные данные BookZaglavie:=trim(mBookZaglavie.Text); ...

Ошибка при работе с Win 8.1
Может кто знает как решить, Кидай рядом с ехе, 2 дллки - 'dbxmys.dll'; 'LIBMYSQL.dll' вылетает на строке ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru