Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Не сохраняются данные в базе


Автор: bartram 16.7.2005, 13:17
Сабж! Работаю с базой MsAccess с помощью ADO через запросы! После открытия базы для редактирования вношу данные в базу через Post. Всё как будто сохраняется потом закрываю своё приложение, открываю снова и как будто я ни чего не сохранял smile И при чём это происходит только с одной таблицей (с которой я работаю на главной форме)
Подскажите что делать?

Автор: SPrograMMer 17.7.2005, 14:02
Цитата(bartram @ 16.7.2005, 13:17)
Всё как будто сохраняется потом закрываю своё приложение, открываю снова и как будто я ни чего не сохранял

Подтверди транзакцию (ADOConnection.CommitTrans)

Автор: bartram 17.7.2005, 15:00
Цитата(SPrograMMer @ 17.7.2005, 14:02)
Подтверди транзакцию (ADOConnection.CommitTrans)

В какой именно момент? Говрит ошибка....

Автор: SPrograMMer 17.7.2005, 20:09
Цитата(bartram @ 17.7.2005, 15:00)
В какой именно момент

Сразу как только post сделал для таблицы
Цитата(bartram @ 17.7.2005, 15:00)
Говрит ошибка....

мы не телепаты, ты наверное - то же smile

Автор: Bes 18.7.2005, 08:27
Не занимайтесь ерундой у ADOQuery есть метод ExecSQL который и выполняет все запросы на изменение никаких постов делать не надо

Автор: bartram 18.7.2005, 09:33
Цитата(SPrograMMer @ 17.7.2005, 20:09)
Говрит ошибка....
мы не телепаты, ты наверное - то же

"Попытка занесения или свертываниятранзакации без предварительного начала транзакации."
Цитата(Bes @ 18.7.2005, 08:27)
у ADOQuery есть метод ExecSQL который и выполняет все запросы на изменение никаких постов делать не надо

Попробую smile

Автор: bartram 18.7.2005, 10:01
Цитата(Bes @ 18.7.2005, 08:27)
ADOQuery есть метод ExecSQL

Не сохраняет smile

Автор: chaos 18.7.2005, 10:25
Добовлять, изменять, удалять надо(во всяком случае я так делаю) с помощью компонента TADOCommand

ps в 5 версии си буилдера(без апдейта адо) постоянно вылетают ошибки при работе с пустыми таблицами

Автор: Bes 18.7.2005, 10:51
2bartram:
что значит не сохраняет?
посмотри содержимое таблицы не в своей программе (т.к. у себя ты может просто не обновляешь данные да мало ли почему) до и после выполнения запроса а вообще давно бы привел код.
изменять значения надо так:

Код

ADOQuery2.active:=false;
ADOQuery2.SQL.text:='update MyTable set Val1 = :Val1 where key1 = :key1';
ADOQuery2.parametrs[0].value='NewValue';
ADOQuery2.parametrs[1].value=2452;
ADOQuery2.ExecSQL;
//здесь визуально конечно ничего не произойдет
ADOQuery1.active:=false;
ADOQuery1.SQL.text:='select * from MyTable';
ADOQuery1.active:=true;
//а вот теперь че-нить и увидешь


Никаких других действий для работы с базами через АДОКвери и делать-то не надо - это самый простой и надежный способ а всякие посты опены и пр. это я так понимаю из бде отсалось да еще и от тэйблов.

Автор: bartram 18.7.2005, 13:44
Bes, посмотри исходники пожалуйста (ссылка в первом посте), сразу всё поймешь smile может быть.

Автор: Bes 18.7.2005, 13:58
не распаковался архив
так объясни - постараюсь понять

Автор: bartram 18.7.2005, 14:54
Вот код 1 формы с таблицей:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, DB, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls, Menus,
  ComCtrls, ToolWin, ImgList, XPMan;

  const //объявляем необходимую константу
  QuerySQL = 'SELECT * FROM Corespondents';

type
  TMain = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    sql1: TADOQuery;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    ImageList1: TImageList;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    XPManifest1: TXPManifest;
    ToolBar2: TToolBar;
    ToolButton5: TToolButton;
    ImageList2: TImageList;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    PopupMenu1: TPopupMenu;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    N18: TMenuItem;
    ADOConnection1: TADOConnection;
    procedure FormCreate(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
    procedure ToolButton8Click(Sender: TObject);
    procedure ToolButton9Click(Sender: TObject);
    procedure ToolButton10Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure ToolButton11Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure N14Click(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure N17Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Main: TMain;


implementation

uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit10, Unit11;

{$R *.dfm}




procedure TMain.FormCreate(Sender: TObject);
begin
sql1.SQL.Add(QuerySQL);
sql1.Open;
end;

procedure TMain.DBGrid1TitleClick(Column: TColumn);
begin
with sql1 do
  begin
    DisableControls;
    SQL.Clear;
    Close;
    SQL.Add(QuerySQL);
    SQL.Add('ORDER BY ' + Column.FieldName);
    Open;
    // Восстанавливаем настройки заголовка
    EnableControls;
  end;
end;

procedure TMain.N2Click(Sender: TObject);
begin
Firm.showmodal;
end;

procedure TMain.N3Click(Sender: TObject);
begin
City.showmodal;
end;

procedure TMain.N5Click(Sender: TObject);
begin
Contry.showmodal;
end;

procedure TMain.N4Click(Sender: TObject);
begin
Region.showmodal;
end;

procedure TMain.N7Click(Sender: TObject);
begin
close;
end;

procedure TMain.ToolButton1Click(Sender: TObject);
begin
 N2.Click;
end;

procedure TMain.ToolButton2Click(Sender: TObject);
begin
n5.Click
end;

procedure TMain.ToolButton3Click(Sender: TObject);
begin
n3.Click
end;

procedure TMain.ToolButton4Click(Sender: TObject);
begin
n4.Click;
end;

procedure TMain.ToolButton7Click(Sender: TObject);
begin
sql1.First;
end;

procedure TMain.ToolButton6Click(Sender: TObject);
begin
sql1.Delete;
end;

procedure TMain.ToolButton8Click(Sender: TObject);
begin
sql1.Prior;
end;

procedure TMain.ToolButton9Click(Sender: TObject);
begin
sql1.Next;
end;

procedure TMain.ToolButton10Click(Sender: TObject);
begin
sql1.Last;
end;

procedure TMain.ToolButton5Click(Sender: TObject);
begin
coredit.Caption:='Добавление записи в таблицу';
main.sql1.Append;
coredit.ShowModal;

end;

procedure TMain.ToolButton11Click(Sender: TObject);
begin
coredit.showmodal;
end;

procedure TMain.N8Click(Sender: TObject);
begin
ToolButton5.Click;
end;

procedure TMain.N9Click(Sender: TObject);
begin
ToolButton11.Click;
end;

procedure TMain.N10Click(Sender: TObject);
begin
ToolButton6.Click;
end;

procedure TMain.N11Click(Sender: TObject);
begin
ToolButton7.Click;
end;

procedure TMain.N12Click(Sender: TObject);
begin
ToolButton8.Click;
end;

procedure TMain.N13Click(Sender: TObject);
begin
ToolButton9.Click;
end;

procedure TMain.N14Click(Sender: TObject);
begin
ToolButton10.Click;
end;

procedure TMain.N16Click(Sender: TObject);
begin
StatContry.showmodal;
end;

procedure TMain.N17Click(Sender: TObject);
begin
StatRegion.showmodal;
end;
end.

Вот Код формы которая сохраняет изменения в таблице:
Код

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, ExtDlgs;

type
  TCoredit = class(TForm)
    Label1: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    Label2: TLabel;
    Label3: TLabel;
    DBEdit3: TDBEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit7: TDBEdit;
    Label8: TLabel;
    DBEdit8: TDBEdit;
    OpenPicDlg: TOpenPictureDialog;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label9: TLabel;
    DBEdit9: TDBEdit;
    DBEdit10: TDBEdit;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    DBEdit6: TDBEdit;
    DBEdit11: TDBEdit;
    DBEdit12: TDBEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
   // procedure FormActivate(Sender: TObject);
   // procedure FormDeactivate(Sender: TObject);
    //procedure DBComboBox1Enter(Sender: TObject);
    //procedure DBComboBox2Enter(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Coredit: TCoredit;

implementation

uses Unit1, Unit3, Unit5, Unit4;

{$R *.dfm}

procedure TCoredit.Button1Click(Sender: TObject);
begin
if openpicdlg.execute
then
dbedit8.Text:=openpicdlg.FileName;
end;

procedure TCoredit.Button2Click(Sender: TObject);
begin
  //dbCombobox1.Text:=inttostr(dbcombobox1.ItemIndex);
//dbCombobox2.Text:=inttostr(dbcombobox1.ItemIndex);
//dbCombobox3.Text:=inttostr(dbcombobox1.ItemIndex);
main.sql1.Edit;
main.sql1.Post;
coredit.Close;
coredit.Caption:='Изменить запись';
end;

procedure TCoredit.Button3Click(Sender: TObject);
begin
main.sql1.cancel;
coredit.Close;
coredit.Caption:='Изменить запись';
end;

procedure TCoredit.FormClose(Sender: TObject; var Action: TCloseAction);
begin
main.sql1.Cancel;
end;

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

Автор: Bes 19.7.2005, 07:26
Сорри
Ну у тебя и навороченоо................
А что ты собственно хочешь сделать?
Где-то была темка по поводу того как правильно программировать базы через АДОКвери, мы там спорили и даже к чему-то пришли, но то что у тебя написано я просто не понимаю.
Давай так: ты все таки напишешь что ты пытаешься сделать а именно какая структура бызы данных какую ты хочешь изменить запись и какие именно поля и какимим имменно значениями ок?
потому как проблема я так понял здесь:
Код

main.sql1.Edit;
main.sql1.Post;
coredit.Close;
coredit.Caption:='Изменить запись';

а ни текста запроса ни параметров ни смысла изменять заголовок формы после закрытия я не вижу....... smile

Автор: bartram 19.7.2005, 09:45
Цитата(Bes @ 19.7.2005, 07:26)
ни смысла изменять заголовок формы после закрытия я не вижу.......

Есть смысл. Прикол в том что если вместо запроса подставлю ADOTable всё работает smile А почему с запросом не работает не знаю...хотя раньше всё работало. smile А в один прекрассный момент всё раз, и перестало работат smile

Автор: Bes 19.7.2005, 09:50
Ну слушай ты или не хочешь понимать или не хочешь что-то делать.
Если так и будешь партизанить ничему не научишься. Я тебе говорю что так с Квери не надо работать а ты мне доказываешь что надо так же как с Тэйблами но у тебя "почему-то" не работает. Что за чушь? smile
Твою в душу.... напиши свой запрос или если считаешь что твой запрос верх программирования и его не стоит публиковать не запотентовав то хотя бы запомни что Select-ы выполняются Active:=true а update insert delete ExecSQL больше я тебе ничем помочь не могу при столь скудной информации.
В конце концов кому это надо тебе или мне?

Автор: bartram 22.7.2005, 08:27
Bes, спасибо я уже разобрался smile

Автор: Bes 22.7.2005, 11:23
Да вообщем-то и не зачто smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)