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


Автор: kovalenko123 25.7.2008, 10:05
Всем привет !!! 
Не могу понять в чем дело у меня Программа работает с аксесом (адо) в обшем надо просто заполнять и редактировать ( все было бы просто если б не запрос )  использую метод Insert 
 и edit а после нажатия на кнопку сохранить он удаляет одну строчку из базы 
Вот код на метод insert 
Код

procedure TForm2.Button1Click(Sender: TObject);
begin
q := 'SELECT Продажа.Код AS Продажа_Код, Продажа.Категория,'+
  ' Продажа.Тип_стен, Продажа.Комнаты,Продажа.Планировка, Продажа.Телефон,'+
  ' Продажа.Площадь,Продажа.Этаж, Продажа.Комплектация, Продажа.Адрес,'+
  ' Продажа.Дата, Продажа.Заметка, Продажа.Цена, Продажа.Хозяин,Продажа.Хтелефон,'+
  ' Продажа.Статус, Категории.Код AS Категории_Код, Категории.Название AS Категории_Название,'+
  ' Планировка.Код AS Планировка_Код,Планировка.Название AS Планировка_Название,'+
  ' Тип_стен.Код AS Тип_стен_Код,Тип_стен.Название AS Тип_стен_Название '+
  ' FROM Тип_стен INNER JOIN (Планировка INNER JOIN (Категории INNER JOIN Продажа ON Категории.Код = Продажа.Категория) ON Планировка.Код = Продажа.Планировка)ON Тип_стен.Код = Продажа.Тип_стен' +
  ' Where  (Продажа.Статус ="Не продано")';
  begin
with Form1.AdoQuery1 do Begin
        insert;
  FieldByName('Категория').AsInteger := mas[ComboBox1.ItemIndex,1];
  FieldByName('Планировка').AsInteger := mas[ComboBox2.ItemIndex,1];;
  FieldByName('Тип_стен').AsInteger := mas[ComboBox3.ItemIndex,1];
  FindField('Комнаты').AsString:=Edit1.Text;
  FindField('Телефон').AsString:=Edit2.Text;
  FindField('Площадь').AsString:=Edit3.Text;
  FindField('Этаж').AsString:=Edit4.Text;
  FindField('Комплектация').AsString:=Edit5.Text;
  FindField('Адрес').AsString:=Edit6.Text;
  FindField('Цена').AsString:=Edit7.Text;
  FindField('Заметка').AsString:=Edit8.Text;
  FindField('Статус').AsString:= 'Не продано' ;
     Post;

 end;
  Form1.ADOQuery1.Active := False;
  Form1.ADOQuery1.SQL.Text := q;
  Form1.ADOQuery1.ExecSQL;
  Form1.ADOQuery1.Open;
end;
end;


там комбобоксы заполняются  из массива по create Form 
Код

while not Form1.ADOTable1.Eof do
    begin
      ComboBox1.Items.Add(Form1.ADOTable1.Fields[1].AsString);
      mas[ComboBox1.Items.Count - 1,1] := Form1.ADOTable1.Fields[0].AsInteger;
      Form1.ADOTable1.Next;
    end;
  while not Form1.ADOTable2.Eof do
    begin
      ComboBox2.Items.Add(Form1.ADOTable2.Fields[1].AsString);
      mas[ComboBox2.Items.Count - 1,2] := Form1.ADOTable2.Fields[0].AsInteger;
      Form1.ADOTable2.Next;
    end;
  while not Form1.ADOTable3.Eof do
    begin
      ComboBox3.Items.Add(Form1.ADOTable3.Fields[1].AsString);
      mas[ComboBox3.Items.Count - 1,3] := Form1.ADOTable3.Fields[0].AsInteger;
      Form1.ADOTable3.Next;
    end;

 
Обьясните почему это происходит Заранее спасибо  

Автор: Rodman 25.7.2008, 10:23
тебе обязательно так замудренно писать?
Цитата(kovalenko123 @  25.7.2008,  10:05 Найти цитируемый пост)
Вот код на метод insert 

Цитата(kovalenko123 @  25.7.2008,  10:05 Найти цитируемый пост)
q := 'SELECT

замечаешь подвох?

Автор: kovalenko123 25.7.2008, 10:28
а тогда у меня после дополнения в гриде не отображаются данные 
чтоб запрос не терялся я ему спец так и сделал 
а что это не нужно??? 

Кстати  в базу данные идут (счетчик "бежит") а в гриде я это не вижу smile 

Автор: Rodman 25.7.2008, 13:29
юзай еще один Query

Автор: kovalenko123 25.7.2008, 14:02
Отдельно для заполнения и отдельно для отображения чтоли ?

Автор: Rodman 25.7.2008, 14:51
ну да.... 

добавил вторым...
обновил первый...

снова добавиль вторым...
обновил первый

Автор: kovalenko123 25.7.2008, 18:35
я обошел уже это, геморойно но обошел, теперь я удалять из базы парюсь 
там какая я то система в запросах на удоление мне после каждого запроса к базе приходиться все обновлять а че  именно в прошлом случае  я актив менял на запросе и перезаписывал его а в этом так не помогает я и датасетом пробовал удалять и всем. Может подскажешь какой нить способ )

Добавлено через 9 минут и 2 секунды
Код

procedure TMain.N11Click(Sender: TObject);
begin
 if Application.MessageBox(PChar ('Вы действительно хотите '+
    'УДАЛИТЬ эту запись'), 'Внимание!', MB_OKCANCEL)=id_OK then
  begin
  Dm.Delete.Parameters[0].Value := dm.Query1.Fields[2].AsInteger;
  Dm.Delete.ExecSQL;
  //Dm.DsQ.DataSet.DisableControls;
  //Dm.DsQ.DataSet.EnableControls;

  Dm.Query1.Active := False;
  Dm.Query1.Open;
end;
end;


вот код удоления
Надо че то выключить потом включить я все пробовал

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