| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Другие СУБД > Проблема с SQL в Delphi |
| Автор: 1Pioner1 31.5.2006, 20:55 |
| Привет всем. Помогите разобратся. Ситуация такова: Есть БД (*.db). Работаю на Delphi 7 и использую BDE; При выполнении запроса SQL я не могу редактировать таблицу (пишет что-то "...read-only") До выполнения запроса всё пучком. В чём может быть дело? Кто знает как это решить? Помогите плиз. Зарание благодарен |
| Автор: skyboy 31.5.2006, 21:45 | ||
1Pioner1, как это "не могу редактировать"? Ты используешь компонент TQuery? А RequestLive установил в True? B что у тебя за запрос? Если запрос типа
то как ты представляешь себе редактирование? |
| Автор: 1Pioner1 31.5.2006, 21:59 |
| Запрос у меня таков procedure TForm1.N9Click(Sender: TObject); var param:string [12]; begin param:=InputBox('Поиск','Введите имя:',''); with Form1.Query1 do begin Close; SQL.Clear; SQL.Add('select *'); SQL.Add('from ":video:db"'); SQL.Add('where'); SQL.Add('(name like "'+ param +'")'); SQL.Add('order by name'); Open; end; if Form1.Query1.RecordCount <> 0 then begin Form1.DataSource1.DataSet:=Query1; try Query1.Open; except On e : EDatabaseError do messageDlg(e.message, mtError, [mbOK],0); end; end else ShowMessage('Даных в базе нет'); end; Добавлено @ 22:04 Ааааааааа понял: Я выполняю запрос в Form1. А при переходе в Form2 выполняется procedure TForm2.FormShow(Sender: TObject); begin Form2.Query1:=Form1.Query1; Form2.DataSource1.DataSet:=Query1; end; И получилось что в Form1 RequestLive стоит False, а в Form2 RequestLive стоит True, но я же с первого запроса все параметры переписываю в другой Спасибо тебе. Натолкнул меня ещё раз всё проверить и разобратся З.Ы. А я то думаю что за... |
| Автор: 1Pioner1 31.5.2006, 22:31 |
| А теперь ещё одна проблема: RequestLive я поставил оба в true, но теперь оно редактирует а не сохраняет изменёные записи. Как в этом случаи поступить? |
| Автор: bas 1.6.2006, 09:02 |
| 1. TUpdateSQL 2.Запрос на обновление |
| Автор: skyboy 1.6.2006, 09:26 |
| 1Pioner1, кажется, FlushBuffers. Под рукой справки нет, не проверю. Если у тебя стоит CashedUpdate = True, то тебе надо самомстояетельно сбрасывать кэш. Скажем, при закрытии формы. Метод то ли Post, то ли FlushBuffers, то ли они оба одинаково действуют... |
| Автор: 1Pioner1 2.6.2006, 12:17 |
| Ситуация следуюющая: Я уже говорил что у меня 2 формы, так вот на первой форме у меня находится SQL который прописан и в второй форме (для того чтобы при переходе на другую форму данные в таблице были те же). Так вот решив проблемы указаные выше, появляется следующая, при выходе из проги данные не сохраняются, хотя при работе вроде всё нормально пашит. Что в таком случае посоветуете? З.Ы. При onShow второй формы делается Edit базы, а при onClose post базы и Update SQL, так как вы посоветовали |
| Автор: 1Pioner1 5.6.2006, 16:50 |
| Мне кто нибуть поможет |
| Автор: skyboy 5.6.2006, 17:12 |
| Как? Совсем изменения не сохраняются? Ни одно? |
| Автор: 1Pioner1 5.6.2006, 19:45 |
| Если CashedUpdate стоит true то не сохраняет ни чего, но работает procedure TForm2.DateTimePicker10Change(Sender: TObject); begin DataSource1.DataSet.FieldByName('srokdo').Value:=DateToStr(DateTimePicker10.Date); DateTimePicker10.Visible:=false; Button10.Visible:=true; DBText10.Visible:=true; end; Что не так????????? |
| Автор: skyboy 5.6.2006, 22:51 | ||
Т.е. надо перевести query в состояние редактирования. |
| Автор: 1Pioner1 6.6.2006, 10:44 |
| Первая форма у меня только для просмотра. При переходе во вторую форму делается DataSource.DataSet.Edit; А при закритии делается DataSource.DataSet.Post; Так что мне не понятно что с ним??? Но это только с DataSource1.DataSet.FieldByName('srokdo').Value:=DateToStr(DateTimePicker10.Date); и другими столбиками. Если же используется DBEdit то всё пучком |
| Автор: 1Pioner1 8.6.2006, 18:30 |
| Кто-то знает |