Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FireBird 2.0 Удаление данных 
V
    Опции темы
Exai1e
Дата 17.3.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здарсти)
Возникла проблема при удалении данных из таблицы

ibquery3
SQL:
Код

DELETE FROM MEDICAMENTS
WHERE MEDID=:Par1


Param:
Par1

Удаление
Код

procedure TMainForm.DelInfoButtonClick(Sender: TObject);
begin
  if MessageDlg('Удалить запись ?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
      begin
        IBQuery3.Params.ParamByName('Par1').Value := IBQuery1MEDID.Value;
        try
          IBQuery3.ExecSQL;
          except
            ShowMessage('Удаление не произошло');
            IBTransaction1.RollbackRetaining;
            exit;
          end;
  IBTransaction1.CommitRetaining;
  IBQuery1.Close;
  IBQuery1.Open;
end;


Удалять то он удаляет... но проблема в том - что удаляет не выбранную запись в гриде а все записи  smile => это не хорошо smile

Что может быть не так ?

p.s. хм... если добавлять данные через IBExpert а потом удалять черех программу тогда удалять все нормально, удаляется по 1 записи...

мб проблема в генерации ID ..... ?

-------------------

хм... ну да, при лобавлениии данных из программы ID у добавленных записей одинаковый.... с чем это может быт связанно ? ведь генератор создан, но работает токо из IBExpert ...

Код

/******************************************************************************/
/****              Generated by IBExpert 16.03.2007 18:42:16               ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1251;



/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GEN_MEDICAMENTS_ID;

CREATE TABLE MEDICAMENTS (
    MEDID         INTEGER NOT NULL,
    MEDNAME       VARCHAR(100) NOT NULL,
    MEDTYPE       VARCHAR(100) NOT NULL,
    MEDREALCOUNT  INTEGER NOT NULL,
    MEDBASECOUNT  INTEGER NOT NULL,
    MEDPRICE      INTEGER NOT NULL
);




/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: MEDICAMENTS_BI */
CREATE TRIGGER MEDICAMENTS_BI FOR MEDICAMENTS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.MEDID IS NULL) THEN
    NEW.MEDID = GEN_ID(GEN_MEDICAMENTS_ID,1);
END
^


SET TERM ; ^



/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/


Вроде решил так эту проблему - при добавлии данных добавлял ид так сказать ручками smile :
Код

IBQuery2.Params.ParamByName('MEDID'       ).Value := IBQuery2.Params.ParamByName('MEDID').Value + 1;


но неустраивает то что например ИД идет у записей 1,2,3,4,5,6 потом удаляеш четверку получается 1,2,3,5,6 и следующая добавляеться 7 ... хоть пользователь не будет видеть ИД записи, но всеравно мне кажеться это неправильно...

Это сообщение отредактировал(а) Exai1e - 17.3.2007, 17:13


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Sovereign
Дата 17.3.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



=) много чего написано, исченовение в гриде записей может быть от закрытия датасета (попробуй кверю обновить) генерация у тебя идет по триггеру, в программе ты NULL значения пускаешь на запись? Ну и что что идет 1,2,3,5,6,7 вдруг тебе прийдется восстанавливать какие-то связи через другие таблицы, триггер или внешний ключ где-то не повесишь, больше путаницы будет

Это сообщение отредактировал(а) Sovereign - 17.3.2007, 19:59
PM MAIL   Вверх
Exai1e
Дата 18.3.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм.. так чтож мне делать то ?
Работаю напиример в базе , ID при добавлениии увеличиваться на 1 благодаря этому тупому способу 
Код

IBQuery2.Params.ParamByName('MEDID'       ).Value := IBQuery2.Params.ParamByName('MEDID').Value + 1;


Закрываю базу... открываю, добавляю запись и снова записи присваиваеться ID 1 , получает 2 поля с ID 1, этоже неправильно...

как решить эту проблему ?

ясный пень что вот это не как не подходит...
Код

IBQuery2.Params.ParamByName('MEDID'       ).Value := IBQuery2.Params.ParamByName('MEDID').Value + 1;


Добавляя данные так
Код

procedure TMainForm.AddInfoButtonClick(Sender: TObject);
begin
  IBQuery2.Params.ParamByName('MEDID'       ).Value := IBQuery2.Params.ParamByName('MEDID').Value;
  IBQuery2.Params.ParamByName('MEDNAME'     ).Value := MedNameEdit.Text;
  IBQuery2.Params.ParamByName('MEDTYPE'     ).Value := MedTypeComboBox.Text;
  IBQuery2.Params.ParamByName('MEDREALCOUNT').Value := StrToInt(MedRealCountEdit.Text);
  IBQuery2.Params.ParamByName('MEDBASECOUNT').Value := StrToInt(MedBaseCountEdit.Text);
  IBQuery2.Params.ParamByName('MEDPRICE'    ).Value := StrToInt(MedPriceEdit.Text);

  try
    IBQuery2.ExecSQL;
    except
      ShowMessage('Îøèáêà ïðè äîáàâëåíèè äàííûõ');
      IBTransaction1.RollbackRetaining;
    exit;
  end;

  IBTransaction1.CommitRetaining;
  IBQuery1.Close;
  IBQuery1.Open;
  IBQuery1.Refresh;
end;


Тож не спасает...

SQL кверти добавления вот такой

Код

INSERT INTO MEDICAMENTS (MEDID, MEDNAME, MEDTYPE, MEDREALCOUNT, MEDBASECOUNT, MEDPRICE)
VALUES (:MEDID, :MEDNAME, :MEDTYPE, :MEDREALCOUNT, :MEDBASECOUNT, :MEDPRICE);


мб тут загвоздка ? ... 
одним словом я в панике  smile  smile  smile  и незнаю че делать  smile 
Help!

Это сообщение отредактировал(а) Exai1e - 18.3.2007, 01:20


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Exai1e
Дата 18.3.2007, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добавил Primary key на поле MEDID 
вот что получилось
Код

/******************************************************************************/
/****               Generated by IBExpert 18.03.2007 2:35:15               ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1251;



/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GEN_MEDICAMENTS_ID;

CREATE TABLE MEDICAMENTS (
    MEDID         INTEGER NOT NULL,
    MEDNAME       VARCHAR(100) NOT NULL,
    MEDTYPE       VARCHAR(100) NOT NULL,
    MEDREALCOUNT  INTEGER NOT NULL,
    MEDBASECOUNT  INTEGER NOT NULL,
    MEDPRICE      INTEGER NOT NULL
);




/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE MEDICAMENTS ADD CONSTRAINT PK_MEDICAMENTS PRIMARY KEY (MEDID);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: MEDICAMENTS_BI */
CREATE TRIGGER MEDICAMENTS_BI FOR MEDICAMENTS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.MEDID IS NULL) THEN
    NEW.MEDID = GEN_ID(GEN_MEDICAMENTS_ID,1);
END
^


SET TERM ; ^



/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/



но теперь не добавляются данные в базу через программу, точнее добавляються, но ток 1 запись... ей присваиваеться автоматически ID 1, далее программа отказывается добавлять записи... если удалить одну существующую запись, то тогда мона добавить , но опять же токо 1....

Всем спасибо, все нормально. вопрос решен

Это сообщение отредактировал(а) Exai1e - 18.3.2007, 04:29


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1209 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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