Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zugriffsfehler mit TBlobStream (https://www.delphipraxis.net/85540-zugriffsfehler-mit-tblobstream.html)

mjenke 1. Feb 2007 11:03

Datenbank: MySQL • Version: 3.23.55 • Zugriff über: BDE, ODBC

Zugriffsfehler mit TBlobStream
 
Hallo, alle miteinander!


Ich habe ein Zugriffsproblem bei dem Versuch in eine MySQL-Datenbank per BlobStream zu schreiben. Und zwar passiert folgendes:

Beim Start der Anwendung wird ein TDatabase-Objekt initialisiert, das eine Verbindung zu einer MySQL-DB auf einem Server aufbaut. Die Verbindung steht. Ich kann lesend und schreibend auf die Daten zugreifen.

Es gibt in der Datenbank allerdings ein BLOB, in das ich schreiben muss (lesen ist kein Problem). Das Schreiben passiert in folgender Prozedur:

Delphi-Quellcode:
procedure TMySQL.UpdateNormenkette(ID: Integer; NormenKette: String);
var
  BS: TBlobStream;
  NK: PChar;
begin

  with FQuery do begin
    RequestLive := True;
    SQL.Clear;
    SQL.Add ( 'SELECT * FROM entscheidungen WHERE ID = ' + IntToStr ( ID ) );
    Open;
    if RowsAffected > 0 then begin
      First;
      if CanModify then begin
        Edit;
        BS := TBlobStream.Create ( TBlobField ( FieldByName ( 'normenkette' ) ), bmWrite );
        try
          NK := PChar ( NormenKette );
          BS.Write ( NK, Length ( NormenKette ) + 1 );
        finally
          BS.Free;
        end;
        Post;
      end;
    end;
    Close;
    RequestLive := False;
  end;
Der Fehler tritt auf, in dem Augenblick, in dem das "Post" abgesetzt wird. Hier bekomme ich die Fehlermeldung, dass der Access für Benutzer "@meinRechner" denied ist. Erstaunlicherweise ist hier offensichtlich kein Benutzer bekannt... sonst würde ja die Meldung "benutzer@meinRechner" erscheinen...

Spaßeshalber habe ich mal folgenden Code geschrieben:

Delphi-Quellcode:
procedure TMySQL.UpdateNormenkette(ID: Integer; NormenKette: String);
var
  BS: TBlobStream;
  NK: PChar;
begin

  with FQuery do begin
    RequestLive := True;
    SQL.Clear;
    SQL.Add ( 'SELECT * FROM entscheidungen WHERE ID = ' + IntToStr ( ID ) );
    Open;
    if RowsAffected > 0 then begin
      First;
      if CanModify then begin
        Edit;
        FieldByName ( 'id' ).AsInteger := ID;
        Post;
      end;
    end;
    Close;
    RequestLive := False;
  end;
Dieser schreibende Zugriff funktioniert... Ich habe also ein Problem mit dem BlobStream...

Hat jemand ein ähnliches Problem gehabt und gelöst?

:?:
Matthias

Udontknow 1. Feb 2007 17:12

Re: Zugriffsfehler mit TBlobStream
 
Hallo!

Die Ursache des Problems kenne ich nun nicht, aber probiere es doch dann mal so.

Cu,
Udontknow

mjenke 6. Feb 2007 12:10

Re: Zugriffsfehler mit TBlobStream
 
Das Problem war viel einfacher...

Warum auch immer der zweite Code-Schnipsel funktioniert hat, kann ich nicht sagen (in dem Augenblick hat er tatsächlich funktioniert). Das Problem lag aber in einem fehlerhaften Auslesen der Registry. Dort habe ich die ODBC-Einträge ausgelesen, aber den User nicht korrekt abgegriffen.

Nachdem ich das korrigiert hatte, gelingt jetzt auch der Zugriff auf die DB genau so wie er soll...

:oops:
Matthias


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz