Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ В БД не появляется картинка

Автор: Triplet 18.08.2007 15:03

Помогите, пожалуйста, найти ошибку в коде.
Предполагается, что это БД с картинками, но картинки не появляются...

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DB, DBTables, DBCtrls, Mask,jpeg;

type
TForm1 = class(TForm)
DataSource1: TDataSource;

Table1: TTable;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Image1: TImage;
DBNavigator1: TDBNavigator;
DBEdit3: TDBEdit;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
DBEdit9: TDBEdit;
DBEdit10: TDBEdit;
DBEdit11: TDBEdit;
procedure Tabel1AfterScroll(DataSet:TDataSet);
procedure DBEdit3KeyPress(sender:TObject;Var Key:char);
procedure DBNavigator1Click(Sender:Tobject;Button:TNavigateBtn);
procedure Tabel1BeforeOpen(DataSet:TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
BmpPath:string;
implementation
{$R *.dfm}
procedure TForm1.Tabel1BeforeOpen(DataSet:TDataSet);
begin
BMPPath:=ExtractFilePath(ParamStr(0))+'data\';
end;

procedure ShowFoto(foto:string);
begin
try
Form1.Image1.Visible:=True;
Form1.Image1.Picture.LoadFromFile(BmpPath+foto);
Form1.Image1.Visible:=True;
except
on EFOpenError do
begin
MessageDlg('картинка'+foto+'не существует.',mtinformation,[mbOK],0);
end;
end;
end;

procedure TForm1.Tabel1AfterScroll(DataSet:TDataSet);
begin
If form1.DBEdit3.Visible then
begin
form1.DBEdit3.Visible:=False;
form1.Label4.Visible:=False;
end;
If Form1.DBEdit3.Text<>''
then ShowFoto(form1.DBEdit3.Text)
else form1.Image1.Visible:=False;
end;

procedure TForm1.DBEdit3KeyPress(sender:TObject; Var Key:Char);
begin
If (Key=#13) then
If Form1.DBEdit3.Text<>''
then ShowFoto(Form1.DBEdit3.Text)
else form1.Image1.Visible:=False;
end;

procedure TForm1.DBNavigator1Click(Sender:TObject;Button:TNavigateBtn);
begin
case Button of
nbInsert:begin
Image1.Visible:=False;
dbEdit3.Visible:=True;
Label4.Visible:=True;
end;end;end;


end.
end.


Автор: volvo 18.08.2007 18:04

Может, было бы проще прикрепить проект с небольшой БД вместе, чтобы можно было посмотреть, как именно и где

Цитата
картинки не появляются
? Опять же, какая база? Информации - ноль...

Автор: Triplet 18.08.2007 19:30

должна получиться БД с диагнозами кардиограмм, т.е.
сам диагноз, значения некоторых показателей и сама кардиограмма.
Прикрепленный файл  DATABASE.zip ( 6.25 килобайт ) Кол-во скачиваний: 297


данные вводить получается, а кардиограмма не появляется.

Автор: volvo 18.08.2007 20:14

У меня не получается даже открыть твою базу - Unknown DB Type ...

Автор: volvo 18.08.2007 20:47

Так, понятно (что-то у меня Дельфи сглючила)... У тебя BMP файл просто в сжатом виде, поэтому выбрасывается исключение "Bitmap Image is not Valid", когда я преобразовал BMP-шу в НЕсжатый вариант - все отработало.

Автор: Triplet 18.08.2007 22:09

А как перевести из сжатого вида в несжатый?
З.Ы.что-то мне вообще не нравится как у меня эта программа работает...
Я хотела, чтобы при добавлении новой записи появлялось поле для ввода имени фотографии(DBEdit3), и появлялось сообщение об ошибке, если указанной фотографии не существует, но у меня это тоже не работает.

Автор: мисс_граффити 18.08.2007 22:14

А зачем так? ИМХО, лучше сделать OpenDialog - и пусть пользователь по-человечески выберет.

Автор: volvo 18.08.2007 22:16

Цитата
А как перевести из сжатого вида в несжатый?
Я пользовался сторонней программой (именно - ACDSee, опция Convert)

Цитата
Я хотела, чтобы при добавлении новой записи появлялось поле для ввода имени фотографии
Было бы проще положить на форму еще и TOpenDialog или TOpenPictureDialog, и заставлять его открываться, скажем при попытке перейти к другой записи (предыдущей или следующей, или к созданию новой), и пустом содержимом DBEdit3.Text... Тогда пользователь будет вынужден выбрать фотографию, ибо если он этого не сделает, то и не перейдет к другой записи и не создаст новую

Автор: Triplet 20.08.2007 13:33

Я конвертировала картинки, но они у меня всё равно не появляются. unsure.gif
а у тебя выводится сообщение об ошибке, если вводить название фотографии, которой не существует?

Автор: volvo 20.08.2007 13:58

При попытке поменять имя BMP-файла на НЕсуществующее ничего не происходит, но как только после этого пытаешься перейти на другую запись - "Исключение EOpenError - не могу открыть <имя файла>"

Цитата
Я конвертировала картинки, но они у меня всё равно не появляются
Странно... Вот та картинка, которая у меня работает:


Прикрепленные файлы
Прикрепленный файл  proba.bmp ( 36.24 килобайт ) Кол-во скачиваний: 397

Автор: Triplet 20.08.2007 15:18

Не знаю, что и думать...
у меня ничего не меняется
может быть, это Делфи глючит или у меня какие-нибудь настройки нарушены?

Автор: hiv 22.08.2007 19:48

Действительно странная вещь - исходный компрессированный файл спокойно открывается стандартным Paint-ом. Но при этом описанный в MSDN (весенний 2007 года) формат заголовка файла BMP гласит: Первые два символа в файле (bfType - Specifies the file type, must be BM.) должен быть BM (в шестнадцатеричке - 424D), а в этот файл начинается с FFD8, что по MSDN означает что это вовсе не BMP-файл!!! wacko.gif

ЗЫ: Как после этого программировать под Мелкософтом?

ЗЫ: Есть подозрение, что возможно в версиях Delphi более 7-ки (может .NET) этот файл будет открываться стандартно... Есть одна библиотека http://www.torry.net/vcl/graphics/bitmap/sunibmp.zip - там есть демо, которое откомпилированное, открывающее этот файл. Но при моем использовании сей библиотеки под Delphi7 этот файл не открылся.