Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL 
:(
    Опции темы
sasha198407
Дата 12.1.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
Помогите пожалуйста уже неделю бьюсь и всё никак. Зарание спасибо.
PM MAIL   Вверх
Keeper89
Дата 13.1.2011, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Странно. Если база пустая, можно попробовать пересоздать это поле и посмотреть.


--------------------
PM MAIL WWW   Вверх
Deniz
Дата 13.1.2011, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



sasha198407, во-первых, нужно пользоваться форматированием в посте.
Во-вторых, ADOQ_Sotrudnik привязан к DBGrid1 и после
Код
DataModule13.ADOQ_Sotrudnik.Close;
обращаться к полям этого датасет'а нельзя.
В-третьих, между
Код
DataModule13.ADOQ_Sotrudnik.ExecSQL;
DataModule13.ADOQ_Sotrudnik.SQL.Add('SELECT * FROM sotrudniki');
нужно добавить 
Код
DataModule13.ADOQ_Sotrudnik.SQL.Clear;



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
superVad
Дата 13.1.2011, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



Зачем дублировать одни и те же данные в двух таблицах? В таблице отпусков тебе должно хватить одного табельного номера.

И отформатируй код - трудно читать.

Это сообщение отредактировал(а) superVad - 13.1.2011, 10:28
PM MAIL   Вверх
Akella
Дата 13.1.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329




M
Akella
используйте кнопку КОД


http://forum.vingrad.ru/forum/topic-126445.html
PM MAIL   Вверх
ziga
Дата 18.1.2011, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Сделай лучше такую структуру БД :

Код

Таблица sotrudniki
id_sotrudnik
fio
dolg
id_otd

Таблица otpusk
id_otpusk
id_sotrudnik
dt_open
dt_close


связь по столбцу id_sotrudnik

в гриде сотрудников отображай 

Код

select *
  from sotrudniki



в гриде сотрудников в отпуске отображай 

Код

select * 
  from sotrudniki st, otpusk ot
 where ot.id_sotrudnik = st.id_sotrudnik
   and ot.dt_close is null

   
и при нажатии кнопки остаётся только сделать инсёрт в таблицу otpusk

Код

insert into otpusk (id_otpusk, id_sotrudnik, dt_open, dt_close) 
values ((select count (*) + 1 from otpusk),
        :p_id_sotrudnik,
        sysdate,
        null)


Передав в отдельный квери пааметр :p_id_sotrudnik (SQL запросы писал в oracle )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.