информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
действительно немного громоздким кажется... 20.10.04 10:31  Число просмотров: 1553
Автор: Duke Статус: Незарегистрированный пользователь
<"чистая" ссылка>
действительно немного громоздким кажется...
все разрешилось переустановкой oracle client с версии runtime на administrator, не знаю почему так... но помогло и пока заморачиваться не буду.
спасибо.
<programming>
[C++] Oracle + c++ builder 18.10.04 17:29  
Автор: Duke Статус: Незарегистрированный пользователь
<"чистая" ссылка>
прога на билдере, работает с oracle через ADO, Oracle provider for OLE DB - драйвер, на моей машине пашет, на другой - нет , говорит - не найден указанный поставщик, возможно он неправильно установлен... oracle клиент установлен, bde (он там используется) - тоже, в чем косяк - не пойму...
сделай приблизительно так... 20.10.04 05:25  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
> прога на билдере, работает с oracle через ADO, Oracle
> provider for OLE DB - драйвер, на моей машине пашет, на
> другой - нет , говорит - не найден указанный поставщик,
> возможно он неправильно установлен... oracle клиент
> установлен, bde (он там используется) - тоже, в чем косяк -
> не пойму...
сделай приблизительно так...
Оберни (wrap up) все объекты доступа к данным, которые наиболее усточиво работают в твоей инфораструктуре приблизительно так:

// file publicdbinterface.h
//
#pragma once

#include <windows.h>


struct IUnknownInterface
{
virtual HRESULT __stdcall QueryInterface(LPCTSTR int_type, void **ppv) = 0;
virtual void __stdcall CanErrorMessage(const int can_msg) = 0;
virtual void __stdcall ErrorMessage(LPTSTR* outval ) = 0;
};

///////////////////////////////////////////////////
// basic query interfaces definition
//
struct IQueryInterface : public IUnknownInterface
{
virtual void __stdcall Connection(LPCTSTR ConnectionStr) = 0;
virtual void __stdcall Database (const void* interfacedb) = 0;
virtual HRESULT __stdcall Open(LPCTSTR SQLstr) = 0;
virtual HRESULT __stdcall Exec(LPCTSTR SQLstr) = 0;
virtual void __stdcall Close (void) = 0;
virtual void __stdcall Delete(void) = 0;
virtual void __stdcall FreeConnections(void) = 0;
virtual void __stdcall First(void) = 0;
virtual void __stdcall Next (void) = 0;
virtual int __stdcall Eof (void) = 0;
virtual HRESULT __stdcall IntegerField(LPCTSTR fieldname, int* outval) = 0;
virtual HRESULT __stdcall FloatField (LPCTSTR fieldname, float* outval) = 0;
virtual HRESULT __stdcall DoubleField (LPCTSTR fieldname, double* outval) = 0;
virtual HRESULT __stdcall StringField (LPCTSTR fieldname, LPTSTR* outval) = 0;

...
<skip>
...

};

typedef HRESULT (__stdcall *pCreateQueryInstance) (IQueryInterface ** pInterface, LPCTSTR inst_type);

// basic database interfaces definition
//
//
struct IDatabaseInterface : public IUnknownInterface
{
virtual HRESULT __stdcall Open (void) = 0;
virtual void __stdcall Delete(void) = 0;
virtual void __stdcall Close (void) = 0;
virtual void __stdcall Connection(LPCTSTR ConnectionStr) = 0;
virtual HRESULT __stdcall StartTransaction(void) = 0;
virtual HRESULT __stdcall InTransaction(void) = 0;
virtual void __stdcall Commit (void) = 0;
virtual void __stdcall Rollback(void) = 0;
virtual void __stdcall TransIsolation(LPCTSTR type) = 0;

...
<skip>
...


};
typedef HRESULT (__stdcall *pCreateDatabaseInstance) (IDatabaseInterface ** pInterface, LPCTSTR inst_type);

// end of file publicdbinterface.h





/////////////////////////////////////////////////////////////////////////////
Тогда ты можешь по "имени" создавать требуемые тебе объекты приблизительно так:

// file interfaces.cpp
//
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <windows.h>
//---------------------------------------------------------------------------
#pragma hdrstop

#include "examples.h"

HINSTANCE hlib;
pCreateQueryInstance CreateQueryInstance;
pCreateDatabaseInstance CreateDatabaseInstance;


//---------------------------------------------------------------------------
// Пример1 использования интерфейса IQueryInterface объектов доступа к данным.
// Объекты, реализующие IQueryInterface, построены с использлванием классов
// и компонент Borland BDE, ADO, Microsoft MFC.
//
// LPCTSTR inst_type - тип объекта доступа к данным ("bde", "ado"...)
// LPCTSTR connection - строка соединения, например, алиас BDE
//
void testquery( LPCTSTR inst_type, LPCTSTR connection )
{
IQueryInterface* IQuery;

_tprintf(_TEXT("\nInstance type:\t%s\nConnection:\t%s\ntry ...\n\n"), inst_type, connection);
// Пробуем создать объект доступа к данным типа LPCTSTR inst_type,
// например, inst_type = "BDE", и получить его интерфейс
// IQueryInterface* IQuery
//
if( FAILED( CreateQueryInstance(&IQuery, inst_type )) )
{
_tprintf(_TEXT("... Can't create query instance %s !\n"), inst_type);
return;
}
// Подключаемся к источнику данных LPCTSTR connection.
IQuery->Connection( connection );
// Пробуем выполнить SQL запрос.
if( FAILED(IQuery->Open( _TEXT("select * from tbl1") )))
{
IQuery->Delete();
return;
}

// В переменные ival,sval будем читать данные
int ival;
LPTSTR sval;

IQuery->First();
while (!IQuery->Eof())
{
if( FAILED(IQuery->IntegerField(_TEXT("id"), &ival))|
FAILED(IQuery->StringField(_TEXT("txt"), &sval)) )
{
IQuery->Delete();
return;
}
_tprintf(_TEXT("id = %d txt = %s\n"), ival, sval);
IQuery->Next();
}

IQuery->Delete();
_tprintf(_TEXT("\nTEST OK!\n"));
}
//---------------------------------------------------------------------------


void _tmain( void )
{
if( !init_examples() ) return;

// Далее предполагается:
// существует источник ODBC "ExampleDb";
// база данных, заданная DSN = ExampleDb, содержит таблицу tbl1;
// в таблице tbl1 имеются целое поле "id" и текстовое поле "txt".
//

////////////////////////////////////////////////////////////////////////
// Пример 1. Функция testquery. Использование интерфейса IQueryInteface.
//
_tprintf(_TEXT("IQUERY INTERFACE EXAMPLE\n"));
// Пробуем ODBC сокеты Borland BDE.
testquery(_TEXT("bde"), _TEXT("ExampleDb"));
// Пробуем ADO.
testquery(_TEXT("ado"), _TEXT("Provider=MSDASQL.1;Persist Security Info=False;Data Source=ExampleDb"));
// Пробуем интерфейс классов MFC доступа к драйверам ODBC.
testquery(_TEXT("odbc.mfc"), _TEXT("ExampleDb"));
// Пробуем интерфейс обёрток MFC доступа к ADO.
testquery(_TEXT("ado.mfc"), _TEXT("Provider=MSDASQL.1;Persist Security Info=False;Data Source=ExampleDb"));

_tprintf(_TEXT("\nDone. Press any key..."));
getch();
}
//---------------------------------------------------------------------------
// end interfaces.cpp

Выхлоп такой - если в критические для тебя дни на клиенте не работает OLE DB (по непонятным причинам),
а разбираться некогда,и быть уволеным не хочется, то просто в текстовом (можешь модно и в XML)
конфигурационном файлике на клиенте говоришь - использовать ODBC вместо BDE (native), или ADO...
Короче в таком духе.

Очень помогает... Хотя на первый звгляд может показаться громозким.
действительно немного громоздким кажется... 20.10.04 10:31  
Автор: Duke Статус: Незарегистрированный пользователь
<"чистая" ссылка>
действительно немного громоздким кажется...
все разрешилось переустановкой oracle client с версии runtime на administrator, не знаю почему так... но помогло и пока заморачиваться не буду.
спасибо.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach