|
#1
|
|||
|
|||
ADO проблемы...
Имеется bd Access,adoquert,adoconnected,datasource,..
Зановить данные в таблицу получается,удалять тоже,только обновление происходит по странному... Создал просто обычную таблицу,так сказать для пробы.Первичный ключ стоит ,текстовое фио и ид числовое... значит пытаюсь обновить так Код:
ADOQuery1.SQL.Text := 'UPDATE table1 SET fio = ' + QuotedStr(Edit2.Text) + ' WHERE id='+Edit1.Text+ ''; ADOQuery1.ExecSQL; |
#2
|
||||
|
||||
А нафига замыкающие кавычки в запросе? Помоему так правильнее:
Код:
ADOQuery1.SQL.Text := 'UPDATE table1 SET fio = ' + QuotedStr(Edit2.Text) + ' WHERE id='+Edit1.Text; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Та же самая проблема...Если обновляет то надо перезапускать ...а если не перезапустить и попробывать внести или удалить данные то та же ошибка ...Project Project1.exe raised exception class EDatabaseError with messasge 'ADOQuery1:Cannot perform this operation on a closed dataset'.Process stopped.Use Step or Run to continue.
|
#4
|
|||
|
|||
Если datasource привязан к этому query, то, теоретически, возникает такая ситуация - Вы выполняете ExecSQL, что в свою очередь выполняет запрос и, если правильно помню, переводит позицию query.active в false. Наверное не очень ясно выражаюсь - попробуйте разделить функции отображения данных из базы и редактирование базы на 2 разных компонента. Один query работает на отображение информации (все запросы с SELECT), вторым query (или даже лучше command) вносите данные в БД (Запросы INPUT, UPDATE, DELETE).
Но могу и ошибаться. Проверить пока что негде. Последний раз редактировалось PiboDIE, 23.06.2009 в 16:12. |
#5
|
|||
|
|||
Если делать как ты говоришь ,то получиться так что выбьет второй квери в пасивное положение..полбому обоим квери нужно в свойствах стандартный запрос делать на выделение данных из таблицы..если я конечно не ошибаюсь..поэтому не получается возможным разбить на два компонента так как обязательно обоим делать селект из базы..я так думаю..попробывать как ты говоришь, я просто создам полную копию первому квери..ведь что бы поставить второй квери в активную позицию выбивает ошибку ,что надо запрос в свойствах заполнить.
|
#6
|
|||
|
|||
Зачем обоим выполнять выборку? Вроде как один квери справлялся до этого. Просто смысл в том, что отображение данных из базы должен выполнять один компонент, а внесение данных - другой. Можно, конечно, все реализовать на базе одного компонента, но в этом случае перед выполнением ExecSQL отключить датасорс, а после выполнения - заново отфильтровать данные из базы и включить датасорс.
Проблема скорее всего кроется в том, что один компонент не может не сбивая фильтр производить изменения в базе данных. |
#7
|
|||
|
|||
Посмотри как это делает программа DA-GENERATOR
Программа автоматически создает DELPHI исходники для работы с таблицами САЙТ ПРОГРАММЫ : FDEVELOPER.COM DEMO ВЕРСИЯ - http://fdeveloper.com/index.php?name=Files&op=cat&id=2 HELP - http://fdeveloper.com/index.php?name...iew_file&lid=2 ВИДЕО УРОКИ - http://fdeveloper.com/index.php?name=Files&op=cat&id=4 ПРИМЕРЫ СГЕНЕРИРОВАННЫХ ПРОГРАММ - http://fdeveloper.com/index.php?name=Files&op=cat&id=5 |
#8
|
|||
|
|||
Цитата:
Что мне в это свойство вписать ?Оно .как я понял не может быть пустым...в первом в свойстве стоит выбор данных из бд..а во второй что вписать в это свойство? |
#9
|
|||
|
|||
Цитата:
|
#10
|
|||
|
|||
Через второй квери ,который в пасивном положении и который только вносит данные ни че не может сделать..ошибка та же закрытый дата сет..
Последний раз редактировалось Booo, 25.06.2009 в 00:58. |
#11
|
|||
|
|||
Попробуйте создать новый проект, накидать на форму ADOConnection, 2 ADOQuery, DataSource и DBTable (точно не помню, я отображение данных вручную делаю через стандартные компоненты.)
Далее создайте простую базу данных и заполните парой тройкой записей. И уже на новом проекте реализуйте отображение с помощью первого квери и изменения с помощью второго. Я в свою очередь дома тоже попробую (если не забуду , но это уже будет не ранее 20 часов ) |
#12
|
|||
|
|||
Прикладываю пример, где у меня ошибок не возникает. Среда разработки Delphi 2007
База данных Access2002-2003 1 таблица tbl_user 4 поля id, username, password, age (В принципе age даже не участвует в запросах ) Unit1.pas Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, Mask, DBCtrls; type TForm1 = class(TForm) dbConnection: TADOConnection; dbQuerySelect: TADOQuery; dbQueryEdit: TADOQuery; dsSelect: TDataSource; DBGrid1: TDBGrid; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var rnd_num: integer; begin rnd_num := Random(100000); dbQueryEdit.SQL.Text := 'INSERT INTO `tbl_user` (`username`, `password`) VALUES (''user'+IntToStr(rnd_num)+''', ''pwd'+IntToStr(rnd_num)+''')'; dbQueryEdit.ExecSQL; dbQuerySelect.Active := false; dbQuerySelect.Active := true; end; procedure TForm1.FormActivate(Sender: TObject); begin Randomize; dbConnection.Connected := true; dbQuerySelect.Active := true; end; end. Unit1.dfm Код:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 439 ClientWidth = 763 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnActivate = FormActivate PixelsPerInch = 96 TextHeight = 13 object DBGrid1: TDBGrid Left = 8 Top = 8 Width = 729 Height = 233 DataSource = dsSelect TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'Tahoma' TitleFont.Style = [] end object Button1: TButton Left = 120 Top = 256 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 1 OnClick = Button1Click end object dbConnection: TADOConnection ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.mdb;Persist Secur' + 'ity Info=False' LoginPrompt = False Mode = cmShareDenyNone Provider = 'Microsoft.Jet.OLEDB.4.0' Left = 16 Top = 248 end object dbQuerySelect: TADOQuery Connection = dbConnection CursorType = ctStatic Parameters = <> SQL.Strings = ( 'SELECT * FROM tbl_user') Left = 16 Top = 280 end object dbQueryEdit: TADOQuery Connection = dbConnection Parameters = <> Left = 80 Top = 280 end object dsSelect: TDataSource DataSet = dbQuerySelect Left = 16 Top = 312 end end Последний раз редактировалось PiboDIE, 25.06.2009 в 20:11. |
#13
|
|||
|
|||
В принципе все эти телодвижения можно выполнять имея всего 1 квери, но тогда алгоритм должен быть примерно следующий
Записи отфильтрованы и отображаются пользователю 1) При возникновении необходимости (нажатие кнопки) внести/удалить/изменить записи отключаем квери Query.Active := false; Не забываем отключить датасорс DataSource.Enabled := false; 2)Запоминаем предыдущий запрос, который отображал данные (Не обязательно запоминать, он может являться константой) tmp_query := Query.SQL.Text; 3)Оформляем новый запрос к базе (внесение/изменение/удаление данных) Query.SQL.Text := 'INSERT/UPDATE/DELETE ...'; 4)Выполняем запрос на изменение данных Query.ExecSQL; 5)Восстанавливаем предыдущий запрос (на отображение данных) Query.SQL.Text := tmp_query; 6)Фильтруем данные из базы Query.Active := true; Восстанавливаем активность датасорса DataSource.Enabled := true; То есть смысл в том, что - квери не может одновременно отображать данные и вносить изменения в базу. (Я могу заблуждаться, но пришел именно к такому выводу) |
#14
|
|||
|
|||
Спасибо за старания ..но проект твой незапустился =(ошибку выбивает ..это не суть .Мне обязательно надо два едита ,где в первом вбивается ид о пользователе,а во втором фио..если это новый пользователь то ид и фио внесуться в бд ,как новая запись..если хотим обновить инфу о пользователе,то в первыи едит вбиваем ид того пользователя ,кого хотим апдейтнуть, а в фио новое фио(которое соответственно обновит старое фио) ...ну в общем я попробую по твоему последнему посту ..спасибо за старания...только проект , не запустился..сижу и так тока ночью ,времени нету,поробую то что ты написал потом скажу что получилось))
|
#15
|
|||
|
|||
АААААА ФАКИНГ ШИТ ЗЕ БЕСТ!!!PibODie Thank you very much ..я должен те телку с большими сиськами !!!!Спасибо спасибо!!
|