unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus, FIBDataSet;
type
TForm2 = class(TForm)
Label1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
procedure FormShow(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var SQL: String;
Stream:TStream;
begin
Edit2.Text:= Trim(Edit2.Text);
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+Edit2.Text+'"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким именем присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Edit2.SetFocus;
Exit;
end;
Edit1.Text:= Trim(Edit1.Text);
SQL:='SELECT Tab_Number FROM EMPLOYEE WHERE FIO = " '+Edit1.Text+ '"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким табельным номером уже присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Edit1.SetFocus;
Exit;
end;
Form1.DataSet1.Insert;
Form1.DataSet1.FieldByName('FIO').AsString:=Edit2.Text;
Form1.DataSet1.FieldByName('Tab_Number').AsString:=Edit1.Text;
Form1.DataSet1.FieldByName('ID_Post').AsString:=Edit3.Text;
Form1.DataSet1.FieldByName('ID_Struct').AsString:=Edit4.Text;
Form1.DataSet1.Post;
ModalResult:=mrOk;
end;
procedure TForm2.Edit2Change(Sender: TObject);
begin
Button1.Enabled:=(Trim(Edit2.Text)<>'')and (Trim(Edit1.Text)<>'');
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit2.SetFocus;
end;
procedure TForm2.N2Click(Sender: TObject);
begin
Form1.Show;
Form2.Close;
end;
procedure TForm2.N3Click(Sender: TObject);
begin
Form2.Close;
end;
end.
SQL запрос
Суть проблемы в том, что при нажатии на клавишу "Ок" должно происходить добавление данных в базу, но этого не происходить и вылетает ошибка 206. Подскажите в чем ошибка, что не так прописал???
Код:
Form1.DataSet1.Insert;
Form1.DataSet1.Edit;
{далее все добавление}
Form1.DataSet1.Edit;
{далее все добавление}
oxotnik333, а разве оно после Insert само не переходит в режим редактирования? Иначе какой смысл?
Код:
Column does not belong to refernced table
Dinamic SQL Error,
SQL error code=-206,
Column unknown
Петросян.
Фе line 1? column 32
Dinamic SQL Error,
SQL error code=-206,
Column unknown
Петросян.
Фе line 1? column 32
База данных создавалась на IBExpert
Отладчик ударил сюда:
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+Edit2.Text+'"';
ЗЫ. И назовите свои поля ввода по человечески, у Вас там, по моему, тоже косяк.
Код:
SQL:='SELECT Tab_Number FROM EMPLOYEE WHERE FIO = " '+Edit1.Text+ '"';
....
Form1.DataSet1.FieldByName('Tab_Number').AsString:=Edit1.Text;
....
....
Form1.DataSet1.FieldByName('Tab_Number').AsString:=Edit1.Text;
....
И что же все таки вводится в поле Edit1 - FIO или Tab_Number?
Код:
var SQL: String;
Stream:TStream;
begin
//Edit2.Text:= Trim(Edit2.Text);
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+FIO.Text+'"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким именем присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
// Edit1.Text:= Trim(Edit1.Text);
SQL:='SELECT TAB_NUMBER FROM EMPLOYEE WHERE TAB_NUMBER = " '+Tab.Text+ '"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким табельным номером уже присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
Form1.DataSet1.Insert;
Form1.DataSet1.Edit;
Form1.DataSet1.FieldByName('FIO').AsString:=FIO.Text;
Form1.DataSet1.FieldByName('TAB_NUMBER').AsString:=Tab.Text;
Form1.DataSet1.FieldByName('ID_POST').AsString:=Post.Text;
Form1.DataSet1.FieldByName('ID_STRUCT').AsString:=Struct.Text;
Form1.DataSet1.Post;
ModalResult:=mrOk;
Stream:TStream;
begin
//Edit2.Text:= Trim(Edit2.Text);
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+FIO.Text+'"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким именем присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
// Edit1.Text:= Trim(Edit1.Text);
SQL:='SELECT TAB_NUMBER FROM EMPLOYEE WHERE TAB_NUMBER = " '+Tab.Text+ '"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким табельным номером уже присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
Form1.DataSet1.Insert;
Form1.DataSet1.Edit;
Form1.DataSet1.FieldByName('FIO').AsString:=FIO.Text;
Form1.DataSet1.FieldByName('TAB_NUMBER').AsString:=Tab.Text;
Form1.DataSet1.FieldByName('ID_POST').AsString:=Post.Text;
Form1.DataSet1.FieldByName('ID_STRUCT').AsString:=Struct.Text;
Form1.DataSet1.Post;
ModalResult:=mrOk;
Цитата: ShooterGod
Подправил:
Код:
var SQL: String;
Stream:TStream;
begin
//Edit2.Text:= Trim(Edit2.Text);
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+FIO.Text+'"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким именем присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
// Edit1.Text:= Trim(Edit1.Text);
SQL:='SELECT TAB_NUMBER FROM EMPLOYEE WHERE TAB_NUMBER = " '+Tab.Text+ '"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким табельным номером уже присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
Form1.DataSet1.Insert;
Form1.DataSet1.Edit;
Form1.DataSet1.FieldByName('FIO').AsString:=FIO.Text;
Form1.DataSet1.FieldByName('TAB_NUMBER').AsString:=Tab.Text;
Form1.DataSet1.FieldByName('ID_POST').AsString:=Post.Text;
Form1.DataSet1.FieldByName('ID_STRUCT').AsString:=Struct.Text;
Form1.DataSet1.Post;
ModalResult:=mrOk;
Stream:TStream;
begin
//Edit2.Text:= Trim(Edit2.Text);
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+FIO.Text+'"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким именем присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
// Edit1.Text:= Trim(Edit1.Text);
SQL:='SELECT TAB_NUMBER FROM EMPLOYEE WHERE TAB_NUMBER = " '+Tab.Text+ '"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким табельным номером уже присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
end;
Form1.DataSet1.Insert;
Form1.DataSet1.Edit;
Form1.DataSet1.FieldByName('FIO').AsString:=FIO.Text;
Form1.DataSet1.FieldByName('TAB_NUMBER').AsString:=Tab.Text;
Form1.DataSet1.FieldByName('ID_POST').AsString:=Post.Text;
Form1.DataSet1.FieldByName('ID_STRUCT').AsString:=Struct.Text;
Form1.DataSet1.Post;
ModalResult:=mrOk;
Да, но на какой строке ошибка вылетает, Вы таки не сказали.
Код:
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+FIO.Text+'"';
Если убрать:
Код:
SQL:= 'SELECT FIO FROM EMPLOYEE WHERE FIO = "'+FIO.Text+'"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким именем присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким именем присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
Exit;
и
Код:
SQL:='SELECT TAB_NUMBER FROM EMPLOYEE WHERE TAB_NUMBER = " '+Tab.Text+ '"';
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким табельным номером уже присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
if (Form1.Database1.QueryValueAsStr(SQL, 0)<>'0') then
begin
Application.MessageBox('Сотрудник с таким табельным номером уже присутствует',
'Дублирование',MB_OK + MB_ICONSTOP);
Tab.SetFocus;
то все работает, следовательно не рабит именно проверка на дублирование данных
Какого типа поле TAB_NUMBER? Также возможно дело в неверном использовании ф-ии QueryValueAsStr (я так понял, это нечно файрбердовское), надо гуглить.
про firebird - правы!!!
Во первых:
SQL:='SELECT TAB_NUMBER FROM EMPLOYEE WHERE TAB_NUMBER = '+Tab.Text; // Никаких кавычек
Во вторых функция QueryValueAsStr здесь пожалуй не прокатит, скорее всего должна быть аналогичная QueryValueAsInt, ибо результат ее работы не строка, а число.
Исправляйте.