type error inserting large obj, Win32 ODBC

Поиск
Список
Период
Сортировка
От Sam O'Connor
Тема type error inserting large obj, Win32 ODBC
Дата
Msg-id 36F5C26E.49702D13@netspace.net.au
обсуждение исходный текст
Список pgsql-interfaces
I'm having a problem getting large objects to work with the IDS ODBC
driver from MS VC++.
I'm Using the MFC CRecordset class to talk to the ODBC driver.
When I try to add a record with a large object stored in a CLongBinary
I get the message below ( see dbms output). If I dont flag the column as
dirty and not NULL, causing the blob to be ignored, the rest of the row
gets updated properly. When I do flag the blob dirty and not NULL then
the driver returns SQL_NEED_DATA in the MFC code and causes
SendLongBinaryData to be called. This sends all the data through then
just before exiting calls SQLParamData again which fails with the error
message.
Below is the error message, the MS code, my setup info and my code.
If anyone can point out what I am doing wrong I would greatly appreciate
it.
If anyone has a completly different better way to do it that would be
just as good.
Some working example code would be best of all.
(If any extra information would be useful I'd be happy to provide it.)
Thanks
Sam O'Connor

---- dbms output ----

ERROR:  parser: attribute 'bitmap' is of type 'lo' but expression is of
type 'int4'
        You will need to rewrite or cast the expression (1)

---- MS code that is called just before error ----

// Check for another DATA_AT_EXEC
AFX_ODBC_CALL(::SQLParamData(hstmt, &pv));
if (!Check(nRetCode))
{
        TRACE0("Error: failure handling long binary value during
update.\n");
        ThrowDBException(nRetCode, hstmt);
}

---- environment ----

PostgreSQL ODBMS 6.4.2

MS VC++6.0 (Using MFC CRecordset class to access ODBC) (Win95)

PostgreSQL ODBC driver from IDS version 6.40.0004 1/8/99
Connection options:
        No boxes checked, IF version 6.4
Driver options:
        Disable Genetic Optimiser
        KSQO
        Unknown size: Maximum
        Text as LongVarChar
        Bool as char
        cache size: 100
        max VarChar: 254
        max LongVarChar: 4094
        Sys table prefixes: dd_;

---- database setup ----

create type lo (
        internallength=4,
        externallength=10,
        input=int4in,
        output=int4out,
        default='',
        passedbyvalue
);

create table image (
        document_id int2,
        document_version int2,
        image_name text,
        bitmap lo,
        primary key (document_id, document_version, image_name)
);

---- calling code ----
m_pSet is an uploadDIBSet* (see source below)

CFile file;
file.Open("c:\\test.dib", CFile::modeRead);

m_pSet->AddNew();
m_pSet->m_document_id = 1;
m_pSet->m_document_version = 2;
m_pSet->m_image_name = "Test image name two";
m_pSet->m_bitmap.m_hData = LoadDIBFile (file,
&(m_pSet->m_bitmap.m_dwDataLength));
m_pSet->SetFieldDirty(&(m_pSet->m_bitmap));
m_pSet->SetFieldNull(&(m_pSet->m_bitmap), FALSE);
m_pSet->Update();

---- uploadDIBSet.h ----

class CUploadDIBSet : public CRecordset
{
public:
        CUploadDIBSet(CDatabase* pDatabase = NULL);
        DECLARE_DYNAMIC(CUploadDIBSet)

        int     m_document_id;
        int     m_document_version;
        CString m_image_name;
        CLongBinary     m_bitmap;
        public:
        virtual CString GetDefaultConnect();
        virtual CString GetDefaultSQL();
        virtual void DoFieldExchange(CFieldExchange* pFX);
};

---- uploadDIBSet.cpp ----

#include "stdafx.h"
#include "uploadDIB.h"
#include "uploadDIBSet.h"

IMPLEMENT_DYNAMIC(CUploadDIBSet, CRecordset)

CUploadDIBSet::CUploadDIBSet(CDatabase* pdb) : CRecordset(pdb) {
        m_document_id = 0;
        m_document_version = 0;
        m_image_name = _T("");
        m_nFields = 4;
        m_nDefaultType = snapshot;
}

CString CUploadDIBSet::GetDefaultConnect() {
        return _T("ODBC;DSN=");
}


--
Sam O'Connor, Melbourne Australia
mail: Sam@OConnor.net
web: Sam.OConnor.net
--

В списке pgsql-interfaces по дате отправления:

Предыдущее
От: Peter T Mount
Дата:
Сообщение: RE: [INTERFACES] JDBC Query performance
Следующее
От: Jason Boxman
Дата:
Сообщение: hello!