![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Получил задание и часть его такая:
1. У нас есть база в Aсcess. Она хранит какую то инфу и адрес к папке с картинками(абсолютный или относительный). 2. У нас есть программа на Delphi При запуске мы подключаем базу через ADO, к примеру. Начинаем просматривать базу. Видим какую то инфу и картинку соответствующую данной записи в базе. Мы можем заменить картинку и при этом в базу записывается новый адрес новой картинки. Вопрос - как это можно сделать??? Идей нет. Жду комментариев и советов... - как делать или где и что читать??? Оч надеюсь на помощь.... |
|
#2
|
||||
|
||||
|
Вот смотрите, маленький вариант:
В примере используется Таблица Sample (id:Autonumber,Context:Text;Picture:Text) Код:
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, DB, ADODB, ExtDlgs, StdCtrls, JPEG, Mask;
type
TForm11 = class(TForm)
Image1: TImage;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
DBEdit1: TDBEdit;
DBMemo1: TDBMemo;
Button1: TButton;
OpenPictureDialog1: TOpenPictureDialog;
procedure ADOTable1AfterScroll(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form11: TForm11;
implementation
{$R *.dfm}
procedure TForm11.ADOTable1AfterScroll(DataSet: TDataSet);
begin
if not ADOTable1.FieldByName('Picture').IsNull
then Image1.Picture.LoadFromFile(ADOTable1.FieldValues['Picture']);
end;
procedure TForm11.Button1Click(Sender: TObject);
begin
OpenPictureDialog1.FileName := VarToStr(DBEdit1.Field.Value);
if not OpenPictureDialog1.Execute then Exit;
DBEdit1.Field.Value := OpenPictureDialog1.FileName;
end;
end.Код:
object Form11: TForm11
Left = 0
Top = 0
Caption = 'Form11'
ClientHeight = 161
ClientWidth = 370
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Image1: TImage
Left = 254
Top = 8
Width = 107
Height = 113
Center = True
Proportional = True
Stretch = True
end
object DBNavigator1: TDBNavigator
Left = 8
Top = 127
Width = 240
Height = 25
DataSource = DataSource1
TabOrder = 0
end
object DBEdit1: TDBEdit
Left = 8
Top = 8
Width = 212
Height = 21
DataField = 'Picture'
DataSource = DataSource1
TabOrder = 1
end
object DBMemo1: TDBMemo
Left = 8
Top = 32
Width = 240
Height = 89
DataField = 'Context'
DataSource = DataSource1
TabOrder = 2
end
object Button1: TButton
Left = 223
Top = 8
Width = 25
Height = 21
Caption = '...'
TabOrder = 3
OnClick = Button1Click
end
object ADOConnection1: TADOConnection
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\'#1061#1086#1079#1103#1080#1085'\Doc' +
'uments\Demo.mdb;Persist Security Info=False;'
LoginPrompt = False
Mode = cmShareDenyNone
Provider = 'Microsoft.Jet.OLEDB.4.0'
Left = 96
Top = 56
end
object ADOTable1: TADOTable
Connection = ADOConnection1
CursorType = ctStatic
AfterScroll = ADOTable1AfterScroll
TableName = 'Sample'
Left = 128
Top = 56
end
object DataSource1: TDataSource
DataSet = ADOTable1
Left = 160
Top = 56
end
object OpenPictureDialog1: TOpenPictureDialog
Left = 192
Top = 56
end
end |
|
#3
|
|||
|
|||
|
Огромное спасибо.
Сейчас буду думать - как запустить. Так все куда надо скопировал. F9 скомпилировалось. Базу в Аксесс - набросал. Нажимаю - открыть файл - сбрасывает с ошибкой. У меня 7 Делфи, исходный текст на какой??? |
|
#4
|
||||
|
||||
|
D2009, но код несложный проблем вроде недолжно быть.
Вы Dfm-файл сделали? |
|
#5
|
|||
|
|||
|
Да, dfm и pas файлы....
Открыл новый проект и изменил dfm и pas файлы.... потом сохранил.... Там сначала конфликт имен был, но я это подправил.... Unit11 на Unit1.... |
|
#6
|
|||
|
|||
|
Да, dfm и pas файлы....
Открыл новый проект и изменил dfm и pas файлы.... потом сохранил.... Там сначала конфликт имен был, но я это подправил.... Unit11 на Unit1.... Ошибка Access violation at address 004ae9d2 in module Project1.exe. Read of address 00000000 |
|
#7
|
|||
|
|||
|
Не создан какой-то объект, к которому происходит обращение.
Запусти в отладчике и скажи на какой строчке это происходит. |
|
#8
|
||||
|
||||
|
Вы бы лучше наоборот, сначала сделали unit11, открыли его, а потом уже переименовывали, а сейчас может и вылазят эти конфликты. Я только-что в D7 проверил - все работает. Деле так:
Создал проект, перешед к коду программы, заменил код программы на первую половину из примера. Переключился в дизайн формы, нажал Ctrl+F12 и заменил код формы на вторую половину из примера. Преключаемся обратно Ctrl+F12. Все элементе на форме отрисоавываются. Сохраняем юнит под именем Unit11. Открываем файл проекта, Project\View source и правим имена форм и юнитов. Все. Последний раз редактировалось Страдалецъ, 06.04.2009 в 09:30. |
|
#9
|
|||
|
|||
|
OpenPictureDialog1.FileName := VarToStr(DBEdit1.Field.Value);
Вот на эту строку ругается в Unit1... |
|
#10
|
||||
|
||||
|
Ругается, потому-что вы неактивировали Базу и таблицу в дизайнере. По уму, надо бы конечно это делать при старте программы.
|
|
#11
|
|||
|
|||
|
ааа, сейчас посмотрю, попробую....
спасибки.... |
|
#12
|
|||
|
|||
|
Ага, ВСЁ РАБОТАЕТ!!!!
Урааа!!! Большое СПАСИБО!!!! Сча разберусь, как делать... |