Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2015, 21:06   #1
Sting_23
 
Регистрация: 23.06.2015
Сообщений: 9
По умолчанию Ошибка при добавлении данных

Подскажите пожалуйста.

Код:
procedur/e TFormAdd.btn1Click(Sender: TObject);
var
  id_vid_peredachi: Integer;
  id_radioset, id_meropriyatiya: Integer;
begin
  id_vid_peredachi:= StrToInt(cbb1.KeyValue);
  id_radioset:= StrToInt(cbbid_radioseti.KeyValue);
  id_meropriyatiya:= StrToInt(cbbid_meropriyatiya.KeyValue);
 
 {with dtmdl1.tblMain do
 begin }
  dtmdl1.tblMain.Insert;
  dtmdl1.tblMain.Fields[1].Value:= Date;
  dtmdl1.tblMain.Fields[2].Value:= edt1.Text ;
  dtmdl1.tblMain.Fields[3].Value:= id_vid_peredachi;
  dtmdl1.tblMain.Fields[4].Value:= edt2.Text;
  dtmdl1.tblMain.Fields[5].Value:= edt3.Text + edt4.Text + lbl13.Caption + edt5.Text + edt6.Text + cbb6.Text;
  dtmdl1.tblMain.Fields[6].Value:= edt8.Text;
  dtmdl1.tblMain.Fields[7].Value:= id_radioset;
  dtmdl1.tblMain.Fields[8].Value:= id_meropriyatiya;
  dtmdl1.tblMain.Fields[10].Value:= edt7.Text;
  dtmdl1.tblMain.Post;
 {end;}
 dtmdl1.qryMain.Active:= False;
 dtmdl1.qryMain.Active:= True;
 
 edt1.Text:= '';
 edt2.Text:= '';
 edt3.Text:= '';
 edt4.Text:= '';
 edt5.Text:= '';
 edt6.Text:= '';
 
  MainForm.dbgrdh1.Columns[3].Visible:= False;
  MainForm.dbgrdh1.Columns[4].Visible:= False;
  MainForm.dbgrdh1.Columns[7].Visible:= False;
  MainForm.dbgrdh1.Columns[8].Visible:= False;
  MainForm.dbgrdh1.Columns[9].Visible:= False;
  MainForm.dbgrdh1.Columns[10].Visible:= False;
  MainForm.dbgrdh1.Columns[0].Width:= 80;
  MainForm.dbgrdh1.Columns[1].Width:= 80;
  MainForm.dbgrdh1.Columns[2].Width:= 200;
  MainForm.dbgrdh1.Columns[5].Width:= 200;
  MainForm.dbgrdh1.Columns[6].Width:= 165;
 
  Close;
 
  dtmdl2.qryPozivnoi.Active:= False;
  dtmdl2.qryPozivnoi.Active:= True;
end;
Выполняю добавление данных в БД. Если БД пустая, то добавляется две записи (первая пустая). А если уже есть записи в БД, то новая добавляется, но изменяется предыдущая запись. Подскажите в чем может быть проблема?
Sting_23 вне форума Ответить с цитированием
Старый 24.06.2015, 00:06   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

В наличии DBgrid с разрешенной возможностью автоматического перевода набора данных (таблицы tblMain) в режим редактирования.
сделай DBgrid.ReadOnly =true и попробуй.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.06.2015, 00:57   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
В наличии DBgrid с разрешенной возможностью автоматического перевода набора данных (таблицы tblMain) в режим редактирования.
сделай DBgrid.ReadOnly =true и попробуй.
Думал о таком варианте. Но имхо было бы исключение при вызове Insert. Ну разве что присутствует ещё и DBNavigator, а автор бездумно жмакает на его кнопки.
northener вне форума Ответить с цитированием
Старый 24.06.2015, 09:41   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Думал о таком варианте. Но имхо было бы исключение при вызове Insert.
Необязательно, если автомат "срабатывает" на других наборах данных.
Цитата:
dtmdl1.tblMain.
Цитата:
dtmdl1.qryMain.
В любом случае надо копаться в методах главной формы.
В вызовах показа форм(ы) редакции. (подозреваю что их там не одна).
Цитата:
procedur/e TFormAdd.btn1Click(Sender: TObject);
var
Покажи как вызывается(показывается) эта самая форма TFormAdd.
Особенно если эти вызовы висят на DBNavigator. то и с каким именно набором данных связан этот навигатор.
Цитата:
Ну разве что присутствует ещё и DBNavigator,
Никогда им не пользуюсь, поэтому сразу даже не подумал о таком.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.06.2015 в 09:47.
evg_m вне форума Ответить с цитированием
Старый 25.06.2015, 13:14   #5
Sting_23
 
Регистрация: 23.06.2015
Сообщений: 9
По умолчанию

DBNavigator-a нет.
Вызывается форма просто по нажатию кнопки.
Код:
procedure TMainForm.btnADDClick(Sender: TObject);
begin
 FormAdd.ShowModal;
end;
Весь код формы:
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBGridEh, ExtCtrls, sPanel, DBCtrlsEh, DBLookupEh, StdCtrls,
  Mask, sMaskEdit, sLabel, sButton, sComboBox, sGroupBox, sEdit;

type
  TFormAdd = class(TForm)
    lbl1: TsLabel;
    edt1: TsMaskEdit;
    lbl2: TsLabel;
    cbb1: TDBLookupComboboxEh;
    lbl3: TsLabel;
    lbl4: TsLabel;
    lbl5: TsLabel;
    cbbid_radioseti: TDBLookupComboboxEh;
    lbl6: TsLabel;
    cbbid_meropriyatiya: TDBLookupComboboxEh;
    spnl1: TsPanel;
    grp1: TsGroupBox;
    grp2: TsGroupBox;
    grp3: TsGroupBox;
    grp4: TsGroupBox;
    lbl7: TsLabel;
    edt2: TsMaskEdit;
    lbl8: TsLabel;
    edt3: TsMaskEdit;
    edt4: TsMaskEdit;
    edt5: TsMaskEdit;
    edt6: TsMaskEdit;
    lbl9: TsLabel;
    lbl10: TsLabel;
    lbl11: TsLabel;
    lbl12: TsLabel;
    lbl13: TsLabel;
    cbb6: TsComboBox;
    grp5: TsGroupBox;
    btn1: TsButton;
    btn2: TsButton;
    edt7: TsEdit;
    edt8: TsEdit;
    procedure btn2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormAdd: TFormAdd;

implementation

uses
  Unit1, Unit2, Unit4;

{$R *.dfm}



procedure TFormAdd.btn2Click(Sender: TObject);
begin
 edt1.Text:= '';
 edt2.Text:= '';
 edt3.Text:= '';
 edt4.Text:= '';
 edt5.Text:= '';
 edt6.Text:= '';
 cbb1.Text:= '';
 cbbid_radioseti.Text:= '';
 cbbid_meropriyatiya.Text:= '';

 FormAdd.Close;
end;






procedure TFormAdd.btn1Click(Sender: TObject);
var
  id_vid_peredachi: Integer;
  id_radioset, id_meropriyatiya: Integer;
begin
  id_vid_peredachi:= StrToInt(cbb1.KeyValue);
  id_radioset:= StrToInt(cbbid_radioseti.KeyValue);
  id_meropriyatiya:= StrToInt(cbbid_meropriyatiya.KeyValue);

 {with dtmdl1.tblMain do
 begin }
  dtmdl1.tblMain.Insert;
  dtmdl1.tblMain.Fields[1].Value:= Date;
  dtmdl1.tblMain.Fields[2].Value:= edt1.Text ;
  dtmdl1.tblMain.Fields[3].Value:= id_vid_peredachi;
  dtmdl1.tblMain.Fields[4].Value:= edt2.Text;
  dtmdl1.tblMain.Fields[5].Value:= edt3.Text + edt4.Text + lbl13.Caption + edt5.Text + edt6.Text + cbb6.Text;
  dtmdl1.tblMain.Fields[6].Value:= edt8.Text;
  dtmdl1.tblMain.Fields[7].Value:= id_radioset;
  dtmdl1.tblMain.Fields[8].Value:= id_meropriyatiya;
  dtmdl1.tblMain.Fields[10].Value:= edt7.Text;
  dtmdl1.tblMain.Post;
 {end;}
 dtmdl1.qryMain.Active:= False;
 dtmdl1.qryMain.Active:= True;

 edt1.Text:= '';
 edt2.Text:= '';
 edt3.Text:= '';
 edt4.Text:= '';
 edt5.Text:= '';
 edt6.Text:= '';

  MainForm.dbgrdh1.Columns[3].Visible:= False;
  MainForm.dbgrdh1.Columns[4].Visible:= False;
  MainForm.dbgrdh1.Columns[7].Visible:= False;
  MainForm.dbgrdh1.Columns[8].Visible:= False;
  MainForm.dbgrdh1.Columns[9].Visible:= False;
  MainForm.dbgrdh1.Columns[10].Visible:= False;
  MainForm.dbgrdh1.Columns[0].Width:= 80;
  MainForm.dbgrdh1.Columns[1].Width:= 80;
  MainForm.dbgrdh1.Columns[2].Width:= 200;
  MainForm.dbgrdh1.Columns[5].Width:= 200;
  MainForm.dbgrdh1.Columns[6].Width:= 165;

  Close;

  dtmdl2.qryPozivnoi.Active:= False;
  dtmdl2.qryPozivnoi.Active:= True;
end;


end.
Вроде ничего сверхестественного, делал уже такое. Но почему сейчас не работает не пойму.
Sting_23 вне форума Ответить с цитированием
Старый 25.06.2015, 15:53   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Покажи как вызывается(показывается) эта самая форма TFormAdd.
код процедур в которых есть что-нибудь из
Код:
formAdd.Show;
formAdd.Visible:=true;
formAdd.ShowModal;
Это будет скорее всего Mainform из unit1
и формы в которых используется qryMain (опять же mainform).
P.S. прошу прощения увидел ShowModal
Цитата:
Вызывается форма просто по нажатию кнопки.
Код:
procedure TMainForm.btnADDClick(Sender: TObject);
begin
 FormAdd.ShowModal;
end;
НО проблемы скорее всего именно там. точнее совокупность.

сначала добавляем в mainform и видимо использованием qryMain (на форуме КОД НЕ ПРИВЕДЕН)
как? пока остается загадкой.
потом ЕЩЕ раз добавляем в FormAdd приведенным здесь(на форуме) кодом.

Еще раз повторюсь.
Чтобы ГАРАНТИРОВАННО избавиться (хотя бы на время тестирования) от "мистических" добавлений посредством Mainform.dbgrid (ИЛИ других)
укажи DBgrid.readOnly :=true;
проблемы останутся ? или возникнут новые ? например скажет что не могу изменить (редактировать) данные.

Конечно же есть еще вариант с неверно написанными триггерами (но это вряд ли) хотя какие -то макросы в Access могут иметь место.
А также всяческие AfterPost/BeforePost в DataModule.
BreakPoint на ....Insert; (на начало добавления)
и F7 чтобы увидеть что мы ЕЩЕ будет делать (кроме "видимых невооруженным глазом" действий по заполнению полей).

Телепатия подсказала
Изменяет исключительно поля завязанные на DBLookUp... ?
Цитата:
то новая добавляется, но изменяется предыдущая запись
Выкиньте maintbl и ДЕЛАЙТЕ все добавления напрямую через qryMain.
и ПЕРЕНЕСИТЕ Insert/Post в главную форму. вот ТАК
Код:
qry.Insert;
formadd.ShowModal;
qry.Post;
да и заполнение тоже можно СЮДА же (после ShowModal).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.06.2015 в 16:38.
evg_m вне форума Ответить с цитированием
Старый 25.06.2015, 21:41   #7
Sting_23
 
Регистрация: 23.06.2015
Сообщений: 9
По умолчанию

Ваша телепатия вас не подводит. Действительно проблемы при изменении DBLookUp. Попробую исправить. Спасибо за подсказку. Результат озвучу.
Sting_23 вне форума Ответить с цитированием
Старый 26.06.2015, 00:47   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

<OFFTOP>
Вот будь моя воля, выкинул бы из Дельфи все DBAware компоненты. Оставил бы только TDBGrid, но сделал бы его всегда ReadOnly. Всё равно они все изначально заточены под IDAPI. И под Парадокс.
И пусть даже мне от этого станет хуже. Зато новые программы станут более грамотными.
</OFFTOP>
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при добавлении данных в БД ( insert into ) курбанниязов Помощь студентам 8 18.05.2014 19:21
Ошибка при добавлении данных в список DartVader C++ Builder 1 21.12.2013 18:43
Ошибка в ADO Query при добавлении новых данных reihtmonbern БД в Delphi 5 16.12.2013 09:12
Ошибка при добавлении данных в бд prizrak1390 PHP 3 29.07.2010 22:47
Ошибка при добавлении данных Ehha1234 БД в Delphi 0 19.06.2010 20:33