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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2010, 08:32   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не чего не вышло поэтому и спросил.
Что не вышло?
Ты внимательно прочитал что я тебя попросил сделать в посте №4?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.04.2010, 05:20   #12
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
Смущение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что не вышло?
Ты внимательно прочитал что я тебя попросил сделать в посте №4?
не получилось узнать какое значение возвращает. По причине того что не знаю как это сделать

Цитата:
Сообщение от Lokos Посмотреть сообщение
не получилось узнать какое значение возвращает. По причине того что не знаю как это сделать
Заметил интересную вещ.
Есть 2 кнопки.
Код первой
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Form1.pFIBDataSet1.Close;
 Form1.pFIBDataSet1.SQLs.SelectSQL.Text:='SELECT * FROM NT';
 Form1.pFIBDataSet1.Open;
 Form1.pFIBDataSet1.Active:=True;
end;
Выводит в DBGrid столбцы имеющиеся в таблицы в моем случае ID и KOL
Код второй кнопки
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
   pFIBDataSet1.Close;
   pFIBDataSet1.SQLs.SelectSQL.Text:='INSERT INTO NT (ID,KOL) VALUES(1,1)';
   pFIBDataSet1.Open;
   Form1.pFIBDataSet1.Active:=True;
end;
Добавляет запись
И вот что происходит если нажать на вторую кнопочку а потом на первую то в DBGrid'e появляются записи все как и положенно.
Но после перезапуска они исчезают тоесть не происходит сохранение.
Так же записи не появляются в таблице при просмотре ее IBExpert'om
Убрал из таблицы все not_null'ы и ключи.

Последний раз редактировалось Stilet; 22.04.2010 в 07:44.
Lokos вне форума Ответить с цитированием
Старый 22.04.2010, 07:45   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не получилось узнать какое значение возвращает. По причине того что не знаю как это сделать
Внимательно читай пост #6!

Во-первых:
Цитата:
Form1.pFIBDataSet1.Open;
Form1.pFIBDataSet1.Active:=True;
Это равноценные операторы. Либо пользуйся одним либо другом.
Я рекомендую пользоваться Form1.pFIBDataSet1.Active:=True; для открытия набора

Во-вторых:
Цитата:
Но после перезапуска они исчезают тоесть не происходит сохранение.
Так посмотри какой метод для того компонента должен сохранять в базу обычно это метод имеет имя Post
И потом Я не знаю IB но по-моему и там метод Open применяется только для получения набора, так что для INSERT он по идее не должен сработать.
I'm learning to live...

Последний раз редактировалось Stilet; 22.04.2010 в 07:47.
Stilet вне форума Ответить с цитированием
Старый 22.04.2010, 08:31   #14
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Внимательно читай пост #6!

Во-первых:

Это равноценные операторы. Либо пользуйся одним либо другом.
Я рекомендую пользоваться Form1.pFIBDataSet1.Active:=True; для открытия набора

Во-вторых:

Так посмотри какой метод для того компонента должен сохранять в базу обычно это метод имеет имя Post
И потом Я не знаю IB но по-моему и там метод Open применяется только для получения набора, так что для INSERT он по идее не должен сработать.
попробывал изменить код следующим образом
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
   Form1.pFIBDataSet1.Active:=True;
   pFIBDataSet1.Append;
   pFIBDataSet1.SQLs.SelectSQL.Text:='INSERT INTO NT (ID,KOL) VALUES(1,1)';
   Form1.pFIBDataSet1.Active:=True;
end;
Появляется ошибка.
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
pFIBQuery1.SQL.Clear;
Form1.pFIBQuery1.SQL.Text:='INSERT INTO NT (ID,KOL) VALUES(:N,:KOL)';
Form1.pFIBQuery1.ParamByName('N').Value:=2;
Form1.pFIBQuery1.ParamByName('KOL').Value:=2;
Form1.pFIBQuery1.ExecQuery;
end;
Следующий код также добавляет запись но она исчезает после перезапуска но тут нет не Open не Active

Последний раз редактировалось Lokos; 22.04.2010 в 08:33.
Lokos вне форума Ответить с цитированием
Старый 22.04.2010, 08:58   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но она исчезает после перезапуска
Может ты всетки будешь читать посты внимательнее?
Вот что я выше написал?
Цитата:
посмотри какой метод для того компонента должен сохранять в базу обычно это метод имеет имя Post
Это для кого писано?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.04.2010, 09:21   #16
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Может ты всетки будешь читать посты внимательнее?
Вот что я выше написал?

Это для кого писано?
Сильно извиняюсь про метод Post забыл.
Ну после вот такой модификации
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
   Form1.pFIBDataSet1.Active:=true;
   Form1.pFIBDataSet1.Edit;
   pFIBDataSet1.SQLs.SelectSQL.Text:='INSERT INTO NT (ID,KOL) VALUES(1,1)';
   Form1.pFIBDataSet1.Post;
end;
Выдается ошибка база только для чтения.
Lokos вне форума Ответить с цитированием
Старый 22.04.2010, 09:36   #17
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

ребята, ни для кого ни секрет, что для операторов Insert Into, DELETE, Update необходимо делать ни Open а ExecSQL
а для того чтобы значения сохранились нужно подтвердить транзауцию..
Код:
var
  NameQuery : TFIBQuery;
begin
   NameQuery := TFIBQuery.Create(Application);
   NameQuery.Database := dm.FIBDatabase;
   NameQuery.Transaction := dm.FIBTransaction;
    try
      NameQuery.sql.Clear;
      NameQuery.SQL.Text := 'INSERT INTO NT (ID,KOL) VALUES(1,1)';
      NameQuery.ExecQuery; //выполняешь вставку
      NameQuery.Transaction.Commit; //подтверждаешь транзакцию
    except //не забываем обрабатывать свои же ошибки
      on e:exception do
       showmessage(e.Message);
    end;
NameQuery.Free; //освобождаем ресурсы
dron-s вне форума Ответить с цитированием
Старый 22.04.2010, 09:43   #18
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
Счастье

Цитата:
Сообщение от dron-s Посмотреть сообщение
ребята, ни для кого ни секрет, что для операторов Insert Into, DELETE, Update необходимо делать ни Open а ExecSQL
а для того чтобы значения сохранились нужно подтвердить транзауцию..
Код:
var
  NameQuery : TFIBQuery;
begin
   NameQuery := TFIBQuery.Create(Application);
   NameQuery.Database := dm.FIBDatabase;
   NameQuery.Transaction := dm.FIBTransaction;
    try
      NameQuery.sql.Clear;
      NameQuery.SQL.Text := 'INSERT INTO NT (ID,KOL) VALUES(1,1)';
      NameQuery.ExecQuery; //выполняешь вставку
      NameQuery.Transaction.Commit; //подтверждаешь транзакцию
    except //не забываем обрабатывать свои же ошибки
      on e:exception do
       showmessage(e.Message);
    end;
NameQuery.Free; //освобождаем ресурсы
Спасибо все получилось.
Lokos вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнение таблицы из бд Damhurz PHP 34 05.04.2013 14:38
Заполнение таблицы по условию hamlook Microsoft Office Excel 15 22.02.2010 21:22
Заполнение таблицы по условию ABCOz Microsoft Office Excel 7 10.09.2009 12:29
заполнение HTML таблицы memka PHP 11 08.04.2009 17:19
заполнение таблицы Andreyka Общие вопросы Delphi 6 07.02.2009 22:18