ODBC MS-Access MemoFeld

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
joo
Beiträge: 6
Registriert: So 28. Feb 2010, 19:23
OS, Lazarus, FPC: Winux (L 1.1 FPC 2.6)
CPU-Target: 64Bit

ODBC MS-Access MemoFeld

Beitrag von joo »

Ich lese aus einer MS-Access.mdb Daten aus. Das klappt mit der beigefügten procedure ganz gut.
Im Select-Statement werden alle Felder bis auf eines aufgelistet. Dieses ist offenbar ein MemoFeld.
Wenn ich SELECT * FROM... schreibe, wird mir der Feldwert dieses Feldes nicht angezeigt,
sondern nur '(MEMO)'. http://www.lazarusforum.de/posting.php? ... f25f81907a#" onclick="window.open(this.href);return false;
Ausserdem wird nur ein Bruchteil der Datensätzte aufgelistet.

FRAGE:
Wie kann der Inhalt eines MemoFeldes dargestellt werdenhttp://www.lazarusforum.de/posting.php?mode=po ... f25f81907a#" onclick="window.open(this.href);return false;

Code: Alles auswählen

procedure TmainForm.Button3Click(Sender: TObject);
  var
  i, k: Integer;
  S: String;
  conn: TODBCConnection;
  query: TSQLQuery;
  transaction: TSQLTransaction;
begin
  i := 0;
  conn := TODBCCOnnection.Create(nil);
  query := TSQLQuery.Create(nil);
  transaction := TSQLTransaction.Create(nil);
  try
    try
      conn.Transaction := transaction;
      conn.Params.Add ('DBQ=C:\TheAccess.mdb');
      conn.Driver := 'Microsoft Access Driver (*.mdb)';
      query.DataBase := conn;
      query.UsePrimaryKeyAsKey:=False;
      query.SQL.Text := 'SELECT  F1, F3, F4, F5 FROM TableName';
      // F2 ist ein MemoFeld !!
      // bei SELECT * FROM TableName tritt das o.g. Problem auf http://www.lazarusforum.de/posting.php?mode=post&f=17&sid=1d0143c7b2fe6598ccc1daf25f81907a#" onclick="window.open(this.href);return false;
      query.Open;
      S := '';
      while not query.EOF do
      begin
        inc(i);
        S := S + 'I >' + intToStr(i) + #13#10;
        for k := 0 to query.FieldCount-1 do begin
          //TODO: ConvertEncoding (S, LowerCase(DBCharset-welcher-isses-denn), 'utf8')
          S := S + query.Fields.Fields[k].Text + '*'
        end;
        S := S + #13#10;
        query.Next;
      end;
    finally
      query.Free;
      conn.Free;
    end;
  except
    on E: Exception do
      ShowMessage(E.message);
  end;
  ODBCMemo.Text:= S;
end;
Zuletzt geändert von Lori am Sa 16. Okt 2010, 19:02, insgesamt 1-mal geändert.
Grund: Highlighter

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: ODBC MS-Access MemoFeld

Beitrag von knight »

Was verwendest du denn zur Anzeige der Daten? Mit einem DBGrid wirst du den Inhalt eines Memo-Feldes nicht darstellen können (Ausnahmen bestätigen die Regel). Aber praktischerweise gibt es auch eine Komponente DBMemo. Einfach das richtige Feld zuweisen, und du kannst dir den Inhalt anzeigen lassen (ggf. muß noch auf die richtige Zeichencodierung geachtet werden).

knight

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: ODBC MS-Access MemoFeld

Beitrag von Hitman »

Ich sehe in dem ganzen lediglich eins .... dringenden Bedarf nach

Code: Alles auswählen

-Tags ;-)

joo
Beiträge: 6
Registriert: So 28. Feb 2010, 19:23
OS, Lazarus, FPC: Winux (L 1.1 FPC 2.6)
CPU-Target: 64Bit

Re: ODBC MS-Access MemoFeld

Beitrag von joo »

Danke knight,
das Problem liegt tiefer. Da einige der Access-Memo-Felder leer sind (oder NULL, weiß nicht)
bricht die Query ab, wenn ein solches "totes" Feld gelesen werden soll.
Fehlermeldung "ODBC error SQL_NO_DATA".
Ich habe bei bugs.freepascal.org bisher keinen brauchbaren Hinweis gefunden.
Daher begnüge ich mich erstmal mit einem work-around.

Antworten