Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 23:46   #1
Toky
Пользователь
 
Регистрация: 16.09.2009
Сообщений: 19
По умолчанию Баги с Query и Table

В моей проге 2 компонента используют БД: Query и Table
соответственно: когда не вводится запросов работает Table, когда запросы вводятся Table должно не работать (хотя оно активно - пробовал выключать и прога сразу вырубается) а Query работает и через него делаются функции: удаления, редактирования. Но когда работает запрос элементы мэмо и дбимэйдж не отображают содержимое полей или отображают но не той что нужно записи, а соседней, при редактировании полей в состоянии запроса - измененные данные не сохраняются. И в завершении. Когда все же пробую редактировать и сохранять данные в режиме запроса, потом выхожу из него, открываю эту же запись возникает ошибка: Блоб поле уже открыто или блоб поле модифицировано. Код кнопки "Применить"
Код:
if Form2.Edit1.Text<>'' then
begin
form2.Query1.Fields[4].AsString := Datetostr(DateTimePicker1.Date);
Form2.Query1.fields[7].AsString:=Label10.Caption;
if (p1<>'') and (p1<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Query1.FieldByName('Photo')As TBlobField).LoadFromFile(p1);
if (p2<>'') and (p2<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Query1.FieldByName('Alfa')As TBlobField).LoadFromFile(p2);
if (p3<>'') and (p3<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Query1.FieldByName('Gamma')As TBlobField).LoadFromFile(p3);
if (p4<>'') and (p4<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Query1.FieldByName('Teta')As TBlobField).LoadFromFile(p4);
if (p5<>'') and (p5<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Query1.FieldByName('Delta')As TBlobField).LoadFromFile(p5);
DBRichedit1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'\Data\Rich1.txt');
DBRichedit2.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'\Data\Rich2.txt');
begin
blob := Form2.Query1.CreateBlobStream(Form2.Query1.FieldByName('Simptom'), bmWrite);
try
blob.Seek(0, soFromBeginning);
fs := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\Data\Rich1.txt', fmOpenRead or
fmShareDenyWrite);
try
blob.CopyFrom(fs, fs.Size)
finally
fs.Free
end;
finally
blob.Free
end;
end;
begin
blob1 := Form2.Query1.CreateBlobStream(Form2.Table1.FieldByName('Diagnoz'), bmWrite);
try
blob1.Seek(0, soFromBeginning);
fs1 := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\Data\Rich2.txt', fmOpenRead or
fmShareDenyWrite);
try
blob1.CopyFrom(fs1, fs1.Size)
finally
fs1.Free
end;
finally
blob1.Free
end;
end;
Form2.Query1.ApplyUpdates;
Close;
end
else
begin
form2.Table1.Fields[4].AsString := Datetostr(DateTimePicker1.Date);
Form2.Table1.fields[7].AsString:=Label10.Caption;
if (p1<>'') and (p1<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Table1.FieldByName('Photo')As TBlobField).LoadFromFile(p1);
if (p2<>'') and (p2<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Table1.FieldByName('Alfa')As TBlobField).LoadFromFile(p2);
if (p3<>'') and (p3<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Table1.FieldByName('Gamma')As TBlobField).LoadFromFile(p3);
if (p4<>'') and (p4<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Table1.FieldByName('Teta')As TBlobField).LoadFromFile(p4);
if (p5<>'') and (p5<>ExtractFilePath(Application.ExeName)+'No_image.bmp')then
(Form2.Table1.FieldByName('Delta')As TBlobField).LoadFromFile(p5);
DBRichedit1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'\Data\Rich1.txt');
DBRichedit2.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'\Data\Rich2.txt');
begin
blob := Form2.Table1.CreateBlobStream(Form2.Table1.FieldByName('Simptom'), bmWrite);
try
blob.Seek(0, soFromBeginning);
fs := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\Data\Rich1.txt', fmOpenRead or
fmShareDenyWrite);
try
blob.CopyFrom(fs, fs.Size)
finally
fs.Free
end;
finally
blob.Free
end;
end;
begin
blob1 := Form2.Table1.CreateBlobStream(Form2.Table1.FieldByName('Diagnoz'), bmWrite);
try
blob1.Seek(0, soFromBeginning);
fs1 := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\Data\Rich2.txt', fmOpenRead or
fmShareDenyWrite);
try
blob1.CopyFrom(fs1, fs1.Size)
finally
fs1.Free
end;
finally
blob1.Free
end;
end;
form2.Table1.Post;
close;
end;
end;

Последний раз редактировалось Toky; 14.12.2009 в 23:58.
Toky вне форума Ответить с цитированием
Старый 14.12.2009, 23:47   #2
Toky
Пользователь
 
Регистрация: 16.09.2009
Сообщений: 19
По умолчанию

код кнопки "Редактировать":
Код:
if Form2.Edit1.Text<>'' then
begin
DataSource1.DataSet:=Form2.Query1;
Query1.RequestLive:=True;
Query1.CachedUpdates:=True;
DataSource1.DataSet.Edit;
Query1.Edit;
form2.Table1.Edit;
Form3.DateTimePicker1.Date:=StrtoDate(form4.DBText5.Caption);
Form3.Image1.Picture.Bitmap.Assign(TBLOBField(Form2.Query1.FieldByName('Photo')));
Form3.Image2.Picture.Bitmap.Assign(TBLOBField(Form2.Query1.FieldByName('Alfa')));
Form3.Image3.Picture.Bitmap.Assign(TBLOBField(Form2.Query1.FieldByName('Gamma')));
Form3.Image4.Picture.Bitmap.Assign(TBLOBField(Form2.Query1.FieldByName('Teta')));
Form3.Image5.Picture.Bitmap.Assign(TBLOBField(Form2.Query1.FieldByName('Delta')));
end
else
begin
form2.Table1.Edit;
Form3.DateTimePicker1.Date:=StrtoDate(form4.DBText5.Caption);
Form3.Image1.Picture.Bitmap.Assign(TBLOBField(Form2.Table1.FieldByName('Photo')));
Form3.Image2.Picture.Bitmap.Assign(TBLOBField(Form2.Table1.FieldByName('Alfa')));
Form3.Image3.Picture.Bitmap.Assign(TBLOBField(Form2.Table1.FieldByName('Gamma')));
Form3.Image4.Picture.Bitmap.Assign(TBLOBField(Form2.Table1.FieldByName('Teta')));
Form3.Image5.Picture.Bitmap.Assign(TBLOBField(Form2.Table1.FieldByName('Delta')));
form2.Table1.UpdateStatus;
form2.Table1.Post;
end;
Form3.CheckBox1.Checked:=False;
form3.SpeedButton3.Visible:=True;
form3.SpeedButton2.Visible:=False;
form3.Label6.Visible:=False;
form3.Label9.Visible:=False;
form3.Label10.Visible:=False;
form3.Caption:='Ðåäàêòèðîâàíèå êàðòî÷êè ¹'+form2.Table1Id.AsString;
form3.ShowModal;
end;

procedure TForm2.DBGrid1DblClick(Sender: TObject);
begin
Form3.CheckBox1.Checked:=False;
if Form2.Edit1.Text='' then
begin
Form2.Table1.Active:=True;
Form2.DataSource1.DataSet:=Form2.Table1;
Form2.Query1.Active:=False;
end;
form4.ShowModal;
end;
Первое условие: if Form2.Edit1.Text<>'' then означает что запрос введен
Toky вне форума Ответить с цитированием
Старый 14.12.2009, 23:56   #3
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Скиньте всю прогу сюда.
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 15.12.2009, 00:01   #4
Toky
Пользователь
 
Регистрация: 16.09.2009
Сообщений: 19
По умолчанию

Вот пожалуйста исходники и сама прога
Вложения
Тип файла: rar DB EEG.rar (1.25 Мб, 11 просмотров)
Toky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Баги онлайн игр 4erw Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 10.04.2009 07:58
Размещение Query и Table на ftp:/ Селезень Работа с сетью в Delphi 6 27.04.2007 15:13
Помогите найти баги Роман Радер Софт 0 01.04.2007 17:44
Копирование записи из Query в Table Rus_icH БД в Delphi 5 04.03.2007 02:56