Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие СУБД > Проблема с SQL в Delphi


Автор: 1Pioner1 31.5.2006, 20:55
Привет всем. Помогите разобратся. Ситуация такова:
Есть БД (*.db). Работаю на Delphi 7 и использую BDE;
При выполнении запроса SQL я не могу редактировать таблицу (пишет что-то "...read-only")
До выполнения запроса всё пучком.
В чём может быть дело?  smile 
Кто знает как это решить?
Помогите плиз.

Зарание благодарен 

Автор: skyboy 31.5.2006, 21:45
1Pioner1, как это "не могу редактировать"? Ты используешь компонент TQuery? А RequestLive установил в True? B что у тебя за запрос? Если запрос типа
Код

SELECT id,count(*) FROM table GROUP BY id

то как ты представляешь себе редактирование?  

Автор: 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, но я же с первого запроса все параметры переписываю в другой smile 

Спасибо тебе. Натолкнул меня ещё раз всё проверить и разобратся smile 

З.Ы. А я то думаю что за... 

Автор: 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, так как вы посоветовали smile  

Автор: 1Pioner1 5.6.2006, 16:50
Мне кто нибуть поможет smile 

 

Автор: skyboy 5.6.2006, 17:12
Как? Совсем изменения не сохраняются? Ни одно? 

Автор: 1Pioner1 5.6.2006, 19:45
Если CashedUpdate стоит true то не сохраняет ни чего, но работает smile  А если CashedUpdate стоит false то сохранять сохраняет только с проблемамиииииии. Тоесть если редактирую одну запись всё нормально, перехожу к другой при изменении какой то записи пишет ''Query1: Dataset not in edit or insert mode.'' В чём проблема не пойму. У меня изменяются несколько полей таким способом:

procedure TForm2.DateTimePicker10Change(Sender: TObject);
begin
 DataSource1.DataSet.FieldByName('srokdo').Value:=DateToStr(DateTimePicker10.Date);
 DateTimePicker10.Visible:=false;
 Button10.Visible:=true;
 DBText10.Visible:=true;
end;

 smile 

Что не так????????? 

Автор: skyboy 5.6.2006, 22:51
Код

 DataSource.DataSet.Edit;
 DataSource1.DataSet.FieldByName('srokdo').Value:=DateToStr(DateTimePicker10.Date);

Т.е. надо перевести query в состояние редактирования.  

Автор: 1Pioner1 6.6.2006, 10:44
Первая форма у меня только для просмотра. При переходе во вторую форму делается DataSource.DataSet.Edit;
А при закритии делается DataSource.DataSet.Post;
Так что мне не понятно что с ним???
Но это только с DataSource1.DataSet.FieldByName('srokdo').Value:=DateToStr(DateTimePicker10.Date);
и другими столбиками.
Если же используется DBEdit то всё пучком smile   

Автор: 1Pioner1 8.6.2006, 18:30
Кто-то знает smile  

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