![]() |
|
|
![]()
|
|
| sasha198407 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.1.2010 Репутация: нет Всего: нет |
Доброго времени суток. Есть база на MSSQLserver под названием kadr и состоит она из таблиц sotrudniki и otpusk
Таблица sotrudniki tab_num fio dolg id_otd Таблица otpusk tab_num fio dolgnost id_otd В Делфи7 создаю клиентскую часть. В Delphi подключение к БД происходит с помощью компонента ADOConnection. Создал две формы. Первая frmSotrudnik с элементами ADOQ_Sotrudnik(ADOQuery1), Source1, DBGrid1, Button1. Вторая frmOtpusk с элементами ADOQ_Otpusk(ADOQuery2), Source2, DBGrid2. Суть в том что бы, выделив одну из записей поля tab_num элемента DBGrid1 и нажав на кнопку Button1 копировать соответствующую строку в таблицу otpusk Ниже приводится код: unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls; type TSotrudnik = class(TForm) DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; Otpusk: TButton; procedure FormCreate(Sender: TObject); procedure OtpuskClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Sotrudnik: TSotrudnik; implementation uses Unit13; {$R *.dfm} procedure TSotrudnik.FormCreate(Sender: TObject); begin Sotrudnik.Show; end; procedure TSotrudnik.OtpuskClick(Sender: TObject); begin DataModule13.ADOQ_Sotrudnik.Close; DataModule13.ADOQ_Sotrudnik.SQL.Clear; DataModule13.ADOQ_Sotrudnik.SQL.Add('INSERT INTO otpusk (tab_num, fio, dolgnost, id_otd)'); DataModule13.ADOQ_Sotrudnik.SQL.Add('SELECT tab_num, fio, dolg, id_otd'); DataModule13.ADOQ_Sotrudnik.SQL.Add('FROM sotrudniki where tab_num=' +DBGrid1.DataSource.DataSet.fieldbyname('tab_num').asString); DataModule13.ADOQ_Sotrudnik.ExecSQL; DataModule13.ADOQ_Sotrudnik.SQL.Add('SELECT * FROM sotrudniki'); DataModule13.ADOQ_Sotrudnik.Active := true; DataModule13.ADOQ_Otpusk.SQL.Add('SELECT * FROM otpusk'); DataModule13.ADOQ_Otpusk.Active := true; end; procedure TSotrudnik.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end. Компиляцию код проходит. но при нажатие на кнопку Button1, то есть при выполнении программы выпадает ошибка: Project kadr.exe raised exception class EDatabaseError with message 'ADOQ_Sotrudnik: Field 'tab_num' not found', Process stoped. Use Step Run to continue. Я так понимаю он говорит что поле tab_num не найдено, но как так если я его вижу(название: tab_num) и в делфи и в MSSQLserver. Помогите пожалуйста уже неделю бьюсь и всё никак. Зарание спасибо. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Странно. Если база пустая, можно попробовать пересоздать это поле и посмотреть.
|
|||
|
||||
| Deniz |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
sasha198407, во-первых, нужно пользоваться форматированием в посте.
Во-вторых, ADOQ_Sotrudnik привязан к DBGrid1 и после
В-третьих, между
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||||
|
|||||||
| superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
Зачем дублировать одни и те же данные в двух таблицах? В таблице отпусков тебе должно хватить одного табельного номера.
И отформатируй код - трудно читать. Это сообщение отредактировал(а) superVad - 13.1.2011, 10:28 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
| ziga |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 25.4.2007 Репутация: нет Всего: 1 |
Сделай лучше такую структуру БД :
связь по столбцу id_sotrudnik в гриде сотрудников отображай
в гриде сотрудников в отпуске отображай
и при нажатии кнопки остаётся только сделать инсёрт в таблицу otpusk
Передав в отдельный квери пааметр :p_id_sotrudnik (SQL запросы писал в oracle ) |
||||||||
|
|||||||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |