Announcement

Collapse
No announcement yet.

IB BlobFelder in TDBMemo funktioniert nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • IB BlobFelder in TDBMemo funktioniert nicht

    Hallo! Ich habe ein Problem
    1. IB Tabelle enthält eine Spalte vom Typ BLOB.
    2. Eine TDBMemo Komponente ist über eine TIBTabele Komponente mit diesem Feld verbunden.
    Immer wenn ich versuche zu speichern oder etwas zu verändern bekomme ich eine Fehlermeldung, daß der Datentyp der TField Komponente nicht in einen Text umgewandelt werden kann.
    Frage:
    Hat das etwas mit den seltsamen SubTypes im DBExplorer zu tun?
    Was ist das überhaupt?

  • #2
    Hallo,

    das folgende Beispiel (das nur über den Objektinspektor konfiguriert werden muss) demonstriert, wie man auf die BLOB-Spalte der Tabelle JOB in der Delphi-Beispieldatenbank <i>employee.gdb</i> zugreift:
    <pre>
    object Form1: TForm1
    Left = 329
    Top = 122
    Width = 696
    Height = 480
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    object Label1: TLabel
    Left = 8
    Top = 88
    Width = 56
    Height = 13
    Caption = 'JOB_CODE'
    FocusControl = DBEdit1
    end
    object Label2: TLabel
    Left = 8
    Top = 128
    Width = 64
    Height = 13
    Caption = 'JOB_GRADE'
    FocusControl = DBEdit2
    end
    object Label3: TLabel
    Left = 8
    Top = 168
    Width = 79
    Height = 13
    Caption = 'JOB_COUNTRY'
    FocusControl = DBEdit3
    end
    object Label4: TLabel
    Left = 8
    Top = 208
    Width = 56
    Height = 13
    Caption = 'JOB_TITLE'
    FocusControl = DBEdit4
    end
    object Label5: TLabel
    Left = 8
    Top = 248
    Width = 68
    Height = 13
    Caption = 'MIN_SALARY'
    FocusControl = DBEdit5
    end
    object Label6: TLabel
    Left = 8
    Top = 288
    Width = 71
    Height = 13
    Caption = 'MAX_SALARY'
    FocusControl = DBEdit6
    end
    object Label7: TLabel
    Left = 8
    Top = 328
    Width = 106
    Height = 13
    Caption = 'JOB_REQUIREMENT'
    FocusControl = DBMemo1
    end
    object DBEdit1: TDBEdit
    Left = 8
    Top = 104
    Width = 69
    Height = 21
    DataField = 'JOB_CODE'
    DataSource = DataSource1
    TabOrder = 0
    end
    object DBEdit2: TDBEdit
    Left = 8
    Top = 144
    Width = 134
    Height = 21
    DataField = 'JOB_GRADE'
    DataSource = DataSource1
    TabOrder = 1
    end
    object DBEdit3: TDBEdit
    Left = 8
    Top = 184
    Width = 199
    Height = 21
    DataField = 'JOB_COUNTRY'
    DataSource = DataSource1
    TabOrder = 2
    end
    object DBEdit4: TDBEdit
    Left = 8
    Top = 224
    Width = 329
    Height = 21
    DataField = 'JOB_TITLE'
    DataSource = DataSource1
    TabOrder = 3
    end
    object DBEdit5: TDBEdit
    Left = 8
    Top = 264
    Width = 134
    Height = 21
    DataField = 'MIN_SALARY'
    DataSource = DataSource1
    TabOrder = 4
    end
    object DBEdit6: TDBEdit
    Left = 8
    Top = 304
    Width = 134
    Height = 21
    DataField = 'MAX_SALARY'
    DataSource = DataSource1
    TabOrder = 5
    end
    object DBMemo1: TDBMemo
    Left = 8
    Top = 344
    Width = 185
    Height = 89
    DataField = 'JOB_REQUIREMENT'
    DataSource = DataSource1
    TabOrder = 6
    end
    object DBNavigator1: TDBNavigator
    Left = 56
    Top = 56
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 7
    end
    object IBDatabase1: TIBDatabase
    Connected = True
    DatabaseName = 'C:\Database\IB\employee.gdb'
    Params.Strings = (
    'user_name=SYSDBA'
    'password=masterkey'
    'lc_ctype=ISO8859_1')
    LoginPrompt = False
    DefaultTransaction = IBTransaction1
    IdleTimer = 0
    SQLDialect = 1
    TraceFlags = []
    Left = 8
    Top = 8
    end
    object IBTransaction1: TIBTransaction
    Active = True
    DefaultDatabase = IBDatabase1
    AutoStopAction = saNone
    Left = 8
    Top = 40
    end
    object IBDataSet1: TIBDataSet
    Database = IBDatabase1
    Transaction = IBTransaction1
    BufferChunks = 1000
    CachedUpdates = False
    DeleteSQL.Strings = (
    'delete from JOB'
    'where'
    ' JOB_CODE = :OLD_JOB_CODE and'
    ' JOB_GRADE = :OLD_JOB_GRADE and'
    ' JOB_COUNTRY = :OLD_JOB_COUNTRY')
    InsertSQL.Strings = (
    'insert into JOB'
    ' (JOB_TITLE, MIN_SALARY, MAX_SALARY, JOB_REQUIREMENT)'
    'values'
    ' (:JOB_TITLE, :MIN_SALARY, :MAX_SALARY, :JOB_REQUIREMENT)')
    RefreshSQL.Strings = (
    'Select '
    ' JOB_CODE,'
    ' JOB_GRADE,'
    ' JOB_COUNTRY,'
    ' JOB_TITLE,'
    ' MIN_SALARY,'
    ' MAX_SALARY,'
    ' JOB_REQUIREMENT,'
    ' LANGUAGE_REQ'
    'from JOB '
    'where'
    ' JOB_CODE = :JOB_CODE and'
    ' JOB_GRADE = :JOB_GRADE and'
    ' JOB_COUNTRY = :JOB_COUNTRY')
    SelectSQL.Strings = (
    'select * from JOB')
    ModifySQL.Strings = (
    'update JOB'
    'set'
    ' JOB_TITLE = :JOB_TITLE,'
    ' MIN_SALARY = :MIN_SALARY,'
    ' MAX_SALARY = :MAX_SALARY,'
    ' JOB_REQUIREMENT = :JOB_REQUIREMENT'
    'where'
    ' JOB_CODE = :OLD_JOB_CODE and'
    ' JOB_GRADE = :OLD_JOB_GRADE and'
    ' JOB_COUNTRY = :OLD_JOB_COUNTRY')
    Active = True
    Left = 48
    Top = 8
    object IBDataSet1JOB_CODE: TIBStringField
    FieldName = 'JOB_CODE'
    Origin = 'JOB.JOB_CODE'
    Required = True
    Size = 5
    end
    object IBDataSet1JOB_GRADE: TSmallintField
    FieldName = 'JOB_GRADE'
    Origin = 'JOB.JOB_GRADE'
    Required = True
    end
    object IBDataSet1JOB_COUNTRY: TIBStringField
    FieldName = 'JOB_COUNTRY'
    Origin = 'JOB.JOB_COUNTRY'
    Required = True
    Size = 15
    end
    object IBDataSet1JOB_TITLE: TIBStringField
    FieldName = 'JOB_TITLE'
    Origin = 'JOB.JOB_TITLE'
    Required = True
    Size = 25
    end
    object IBDataSet1MIN_SALARY: TFloatField
    FieldName = 'MIN_SALARY'
    Origin = 'JOB.MIN_SALARY'
    Required = True
    end
    object IBDataSet1MAX_SALARY: TFloatField
    FieldName = 'MAX_SALARY'
    Origin = 'JOB.MAX_SALARY'
    Required = True
    end
    object IBDataSet1JOB_REQUIREMENT: TMemoField
    FieldName = 'JOB_REQUIREMENT'
    Origin = 'JOB.JOB_REQUIREMENT'
    BlobType = ftMemo
    Size = 8
    end
    end
    object DataSource1: TDataSource
    DataSet = IBDataSet1
    Left = 336
    Top = 224
    end
    end
    </pre>
    Diese Spalte JOB_REQUIREMENT der Tabelle JOB ist als <b>BLOB SUB_TYPE TEXT</b> gekennzeichnet, so dass die InterBase-Tools dort nur darstellbare Zeichen erwarten. Auf die Datenspeicherung selbst hat dies jedoch keine Einfluss.<br>
    Legt man in Delphi über den Feldeditor für die TIBDataSet-Instanz <i>persistente TField-Instanzen</i> an, nutzt IBX für die BLOb-Spalte den Typ <b>TMemoField</b>

    Comment

    Working...
    X