Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 983

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Как с помощью ADO записать в поле BLOB таблицы бд Access поток и потом считать? Код в приложении вызывает ошибку. Спасибо!

Приложение:
  1. var
  2. ms: TMemoryStream;
  3. i: integer;
  4. str: string[255];
  5. begin
  6. ms:= TMemoryStream.Create;
  7. i:= StrToInt(Edit1.text);
  8. str := Edit2.text;
  9. ms.Write(i,SizeOf(integer));
  10. ms.Write(str, 255);
  11. AdoTable.Edit;
  12. TAdoBlobStream(AdoTable.Recordset.Fields[1]).LoadFromStream(ms);
  13. AdoTable.Post;
  14. ms.Free;
  15. end;
  16.  


Евгений Eklmn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 11 июля 2009, 14:53
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 11 июля 2009, 16:16; участников в обсуждении: 1.
Зозуля А. А.

Зозуля А. А. (статус: Посетитель), 11 июля 2009, 16:16 [#1]:

Ошибку вызывает, скорее всего, метод POST (попробуйте эксперементально, просто я когда то давно с этим сталкивался). Поиск описания кода приведет Вас к "C++ Exception". Вот Вам "на скору руку состряпаная програмка", которая умеет записывать данные в таблицу БЕЗ ошибок и любого формата. Думаю, как потом считать их по аналогии разберетесь. Для работы создана в аксесе бд "test" с 1 таблицей "Example" с 3 поялми N, Time, Num.
НЕ ЗАБУДЬТЕ исправить секцию "program", как показано ниже:

program Project1;

uses
Forms,
ComObj,
Unit1 in '..\Unit1.pas' {Form1};

{$R *.res}

begin
CoInitFlags := 0;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Далее сама программа. Создайте пустую форму, разместите на ней только 1 кнопку и все.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, DBTables;
type
TPotok = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create;
end;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}
var
Potoks: TPotok;

procedure TForm1.Button1Click(Sender: TObject);
begin
Potoks:=TPotok.Create;
end;

constructor TPotok.Create;
begin
inherited Create(False);
FreeOnTerminate:=True;
end;

procedure TPotok.Execute;
var
Q:TADOQuery;
begin
Q:=TADOQuery.Create(Application);
Q.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False;Jet OLEDB:Database Password=""';
Q.Close;
Q.SQL.Clear;
Q.SQL.Add('INSERT INTO Example (N,Time,Num) VALUES ("1","'+DateTimeToStr(Now)+'","3")');
Q.ExecSQL;
Q.Free;
end;

end.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.02 сек.