locate памагите!

maris10
Дата: 20.11.2007 23:58:32
procedure Tjauns_darbinieks.Button1Click(Sender: TObject);
begin
datamodule1.ADOdarbinieki.Insert;
end;

procedure Tjauns_darbinieks.Button2Click(Sender: TObject);
label sakums;
begin
if DBedit1.Text ='' then
  begin
  showmessage('Nav ievadīts darbinieka Uzvārds/Vārds!');
  activecontrol:=DBedit1;
  goto sakums;
  end;
if Dbedit5.Text ='' then
  begin
  showmessage('Nav ievadīts personas kods!');
  activecontrol:=dbedit5;
  goto sakums;
  end;
if dbmemo1.Text ='' then
  begin
  showmessage ('Nav ievadīta darbinieka adrese!');
  activecontrol:=dbmemo1;
  goto sakums;
  end;
if dbedit4.text ='' then
  begin
  showmessage ('Nav ievadīts darbinieka amats!');
  activecontrol:=dbedit4;
  goto sakums;
datamodule1.ADOdarbinieki.FieldByName('darbinieka_persona').AsString:=DBEdit1.Text;
datamodule1.ADOdarbinieki.FieldByName('personas_kods').AsString:=DBEdit5.Text;
datamodule1.ADOdarbinieki.FieldByName('adrese').AsString:=DBMemo1.Text;
datamodule1.ADOdarbinieki.FieldByName('talrunis').AsString:=DBEdit2.Text;
datamodule1.ADOdarbinieki.FieldByName('e_pasts').AsString:=DBEdit3.Text;
datamodule1.ADOdarbinieki.FieldByName('amats').AsString:=DBEdit4.Text;
datamodule1.ADOdarbinieki.FieldByName('piezimes').AsString:=DBmemo2.Text;
datamodule1.ADOdarbinieki.FieldByName('lietotajvards').AsString:=DBEdit6.Text;
datamodule1.ADOdarbinieki.FieldByName('parole').AsString:=DBEdit7.Text;
datamodule1.ADOdarbinieki.Post;
end;
if datamodule1.ADOizpilditaji.locate('izpilditaja_persona',DBedit1.Text,[loPartialKey])
  then
   showmessage('есть')
  else
   datamodule1.ADOizpilditaji.Insert;
   datamodule1.ADOizpilditaji.FieldByName('izpilditaja_persona').asstring:=DBEdit1.Text;
   datamodule1.ADOizpilditaji.Post;
sakums:
end;

праблема такая: кагда делаю новую запись в ADOdarbinieki, и в таблице adoizpilditaji нету такои записи, тагда записивает в обах таблицах.

А если делаю запись в adodarbinieki, и в adoizpilditaji такая уже есть то викидивает ашибку (adoizpilditaji dataset not in edit or insert mode).

Никак не могу разобратьcя.
Kotъ-Begemotъ
Дата: 21.11.2007 00:11:15
1. Код просто ужастен. Не обижайся. Избавляйся от Goto однозначно - это вообще не есть гут. НИКОГДА не пользовался, и не буду. Покажите мне пример, где я не могу обойтись без Goto и я может быть изменю своё мнение.

2. Смысл процедуры, которая только открывает таблицу на вставку?!? Не пойму. Не за чем однозначно! Где надо вставлять, там и вставляй, не надо так разбивать бессмысленно!

3. Если это вставка запиисей в Master - Detail таблицы, то кто мешает сделать что-то вроде:

function MasterAppend(var Field1: Integer, Field2: String);
begin
 try
  MasterTable.Insert;
   MasterTableField1.Value := Field1;
   MasterTableField2.Value := Field2;
  MasterTable.Post;
   Result := MasterTableKeyField.Value; // Автоинкрементное поле к примеру.
  except
   Result := 0;
 end;//try
end;

А затем перед вставкой в Detail таблицу сделать что-то вроде:

var Rs: Integer;

Rs := MasterAppend(10, 'Ten');
 if Rs = 0 then
  begin
   MessageBox(Form.Handle, 'Ошибка записи в Master-таблицу!', 'Ошибка!', MB_OK or MB_ICONERROR or MB_APPLMODAL);
   Exit;
  end;

// А тут вставляем в Detail-таблицу.
Гаджимурадов Рустам
Дата: 21.11.2007 00:41:16

Kotъ-Begemotъ> Покажите мне пример, где я не могу обойтись без Goto и я может быть изменю своё мнение.

В поиск, вопрос просто избитый. ;)
Приведу лишь фразу, которая мне всегда очень нравилась:
Goto не боятся использовать только новички и профессионалы. (с)


Posted via ActualForum NNTP Server 1.4

Гаджимурадов Рустам
Дата: 21.11.2007 00:44:08

maris10> procedure Tjauns_darbinieks.Button2Click(Sender: TObject);
> label sakums;
> begin
> if DBedit1.Text ='' then
> begin
> showmessage('Nav ievadits darbinieka Uzvards/Vards!');
> activecontrol:=DBedit1;
> goto sakums;
> end;
> ...
> sakums:
> end;

Марис, во-первых, прочитай про исключения (exceptions), наверное, в данном случае
тебе вместо showmessage + goto следовало использовать raise Exception.Create('текст').
Во-вторых, в приведенном тобой коде goto можно заменить на обычный exit.


Posted via ActualForum NNTP Server 1.4

maris10
Дата: 21.11.2007 00:51:05
if datamodule1.ADOizpilditaji.locate('izpilditaja_persona',DBedit1.Text,[loPartialKey])
  then
   showmessage('есть')
  else
   datamodule1.ADOizpilditaji.Insert;
   datamodule1.ADOizpilditaji.FieldByName('izpilditaja_persona').asstring:=DBEdit1.Text;
   datamodule1.ADOizpilditaji.Post;
sakums:
end;
мне кагби болше интересавала ета часть
maris10
Дата: 21.11.2007 00:51:48
maris10
if datamodule1.ADOizpilditaji.locate('izpilditaja_persona',DBedit1.Text,[loPartialKey])
  then
   showmessage('есть')
  else
   datamodule1.ADOizpilditaji.Insert;
   datamodule1.ADOizpilditaji.FieldByName('izpilditaja_persona').asstring:=DBEdit1.Text;
   datamodule1.ADOizpilditaji.Post;
sakums:
end;
мне кагби болше интересавала ета часть


пачему тут викидивает ашибку?
guru-ru
Дата: 21.11.2007 01:09:45
> if
> datamodule1.ADOizpilditaji.locate('izpilditaja_persona',DBedit1.Text,[loPartialKey])
> then
> showmessage('есть')
> else
> datamodule1.ADOizpilditaji.Insert;
>
> datamodule1.ADOizpilditaji.FieldByName('izpilditaja_persona').asstring:=DBEdit1.Text;
> datamodule1.ADOizpilditaji.Post;
> sakums:
> end;

ты begin/end не поставил

у тебя получается, если запись есть, то выводится сообщение и дальше идет
выполняться код
datamodule1.ADOizpilditaji.FieldByName('izpilditaja_persona').asstring:=DBEdit1.Text;
datamodule1.ADOizpilditaji.Post;
вот так попробуй
ifdatamodule1.ADOizpilditaji.locate('izpilditaja_persona',DBedit1.Text,[loPartialKey])
then showmessage('есть')
else datamodule1.ADOizpilditaji.Insert;
datamodule1.ADOizpilditaji.FieldByName('izpilditaja_persona').asstring:=DBEdit1.Text;
datamodule1.ADOizpilditaji.Post; sakums:end;
Гаджимурадов Рустам
Дата: 21.11.2007 01:25:04

maris10
мне кагби болше интересавала ета часть

Как уже сказали, ты begin-end не поставил:
if datamodule1.ADOizpilditaji.locate('izpilditaja_persona',DBedit1.Text,[loPartialKey])
    then    showmessage('есть')
    else
    begin
        datamodule1.ADOizpilditaji.Insert;
        datamodule1.ADOizpilditaji.FieldByName('izpilditaja_persona').asstring:=DBEdit1.Text;
        datamodule1.ADOizpilditaji.Post;
    end;



Posted via ActualForum NNTP Server 1.4

Kotъ-Begemotъ
Дата: 21.11.2007 01:43:25
Гаджимурадов Рустам
В поиск, вопрос просто избитый. ;)
Приведу лишь фразу, которая мне всегда очень нравилась:
Goto не боятся использовать только новички и профессионалы. (с)


Спорить не буду, но я поклонник Виртовской линии, поэтому вопрос даже не стоит так :) Goto излишняя конструкция науршающая щелостность мышления (вернее правильность оного) :) ИМХО, разумеется.