Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Representa uma ligação a uma fonte de dados, através da qual pode operar sobre essa fonte.
Sintaxe
class CDatabase : public CObject
Membros
Construtores Públicos
| Nome | Description |
|---|---|
CDatabase::CDatabase |
Constrói um CDatabase objeto. Deve inicializar o objeto chamando OpenEx ou Open. |
Métodos Públicos
| Nome | Description |
|---|---|
CDatabase::BeginTrans |
Inicia uma "transação" — uma série de chamadas reversíveis para as AddNewfunções , Edit, Delete, e Update membros da classe CRecordset — na fonte de dados conectada. A fonte de dados deve suportar transações para BeginTrans que tenha algum efeito. |
CDatabase::BindParameters |
Permite associar parâmetros antes de chamar CDatabase::ExecuteSQL. |
CDatabase::Cancel |
Cancela uma operação assíncrona ou um processo de um segundo thread. |
CDatabase::CanTransact |
Retorna diferente de zero se a fonte de dados oferecer suporte a transações. |
CDatabase::CanUpdate |
Retorna diferente de zero se o CDatabase objeto for atualizável (não apenas leitura). |
CDatabase::Close |
Fecha a ligação à fonte de dados. |
CDatabase::CommitTrans |
Conclui uma transação iniciada por BeginTrans. São executados comandos na transação que alteram a fonte de dados. |
CDatabase::ExecuteSQL |
Executa uma instrução SQL. Não são devolvidos registos de dados. |
CDatabase::GetBookmarkPersistence |
Identifica as operações através das quais os marcadores persistem nos objetos do recordet. |
CDatabase::GetConnect |
Devolve a cadeia de ligação ODBC usada para ligar o CDatabase objeto a uma fonte de dados. |
CDatabase::GetCursorCommitBehavior |
Identifica o efeito de comprometer uma transação num objeto de registo aberto. |
CDatabase::GetCursorRollbackBehavior |
Identifica o efeito de reverter uma transação num objeto de registo aberto. |
CDatabase::GetDatabaseName |
Devolve o nome da base de dados atualmente em uso. |
CDatabase::IsOpen |
Retorna diferente de zero se o CDatabase objeto estiver atualmente ligado a uma fonte de dados. |
CDatabase::OnSetOptions |
Chamado pelo framework para definir opções padrão de ligação. A implementação padrão define o valor de timeout da consulta. Pode estabelecer estas opções antecipadamente ligando SetQueryTimeoutpara . |
CDatabase::Open |
Estabelece uma ligação a uma fonte de dados (através de um driver ODBC). |
CDatabase::OpenEx |
Estabelece uma ligação a uma fonte de dados (através de um driver ODBC). |
CDatabase::Rollback |
Reverte as alterações feitas durante a transação atual. A fonte de dados regressa ao seu estado anterior, tal como definido na BeginTrans chamada, inalterada. |
CDatabase::SetLoginTimeout |
Define o número de segundos após os quais uma tentativa de ligação à fonte de dados expira. |
CDatabase::SetQueryTimeout |
Define o número de segundos após os quais as operações de consulta à base de dados irão expirar. Afeta todos os registos subsequentes Open, AddNew, Edit, e Delete chamadas. |
Membros de Dados Públicos
| Nome | Description |
|---|---|
CDatabase::m_hdbc |
Handler de ligação Open Database Connectivity (ODBC) para uma fonte de dados. Tipo HDBC. |
Observações
Uma fonte de dados é uma instância específica de dados alojada por algum sistema de gestão de bases de dados (SGBD). Exemplos incluem Microsoft SQL Server, Microsoft Access, Borland dBASE e xBASE. Pode ter um ou mais CDatabase objetos ativos de cada vez na sua aplicação.
Observação
Se estiver a trabalhar com as classes Data Access Objects (DAO) em vez das classes Open Database Connectivity (ODBC), use CDaoDatabase class em vez disso. Para mais informações, consulte o artigo Visão Geral: Programação de Bases de Dados.
Para usar CDatabase, constrói um CDatabase objeto e chama a sua OpenEx função membro. Isto abre uma ligação. Quando construir CRecordset objetos para operar na fonte de dados conectada, passe ao construtor do conjunto de registos um ponteiro para o seu CDatabase objeto. Quando terminares de usar a ligação, chama a Close função membro e destrói o CDatabase objeto.
Close encerra quaisquer conjuntos de registos que não tenha fechado anteriormente.
Para mais informações sobre CDatabase, veja os artigos Fonte de Dados (ODBC) e Visão Geral: Programação de Bases de Dados.
Hierarquia de herança
CDatabase
Requerimentos
Cabeçalho:afxdb.h
CDatabase::BeginTrans
Chame esta função membro para iniciar uma transação com a fonte de dados conectada.
BOOL BeginTrans();
Valor de retorno
Diferente de zero se a chamada foi bem-sucedida e as alterações forem realizadas apenas manualmente; caso contrário, 0.
Observações
Uma transação consiste em uma ou mais chamadas às AddNewfunções , Edit, Delete, e Update membros de um CRecordset objeto. Antes de iniciar uma transação, o CDatabase objeto deve já ter sido ligado à fonte de dados ao chamar a sua OpenEx função ou Open membro. Para terminar a transação, chame CommitTrans para aceitar todas as alterações à fonte de dados (e realize-as) ou peça Rollback para abortar toda a transação. Ligue BeginTrans depois de abrir quaisquer conjuntos de registos envolvidos na transação e o mais próximo possível das operações de atualização reais.
Atenção
Dependendo do seu condutor ODBC, abrir um conjunto de registos antes de ligar BeginTrans pode causar problemas ao ligar Rollback. Deves verificar o driver específico que estás a usar. Por exemplo, ao utilizar o driver Microsoft Access incluído no Microsoft ODBC Desktop Driver Pack 3.0, deve ter em conta o requisito do motor de base de dados Jet de que não deve iniciar uma transação em qualquer base de dados que tenha cursor aberto. Nas classes de base de dados MFC, um cursor aberto significa um objeto aberto CRecordset . Para mais informações, consulte a Nota Técnica 68.
BeginTrans pode também bloquear registos de dados no servidor, dependendo da concorrência solicitada e das capacidades da fonte de dados. Para informações sobre dados de bloqueio, consulte o artigo Conjuntos de Registos: Registos de Bloqueio (ODBC).
As transações definidas pelo utilizador são explicadas no artigo Transação (ODBC).
BeginTrans estabelece o estado para o qual a sequência de transações pode ser revertida (revertida). Para estabelecer um novo estado para rollbacks, comprometer qualquer transação atual e depois chamar BeginTrans novamente.
Atenção
Ligar BeginTrans novamente sem ligar CommitTrans ou Rollback é um erro.
Ligue para a CanTransact função de membro para determinar se o seu driver suporta transações para uma determinada base de dados. Deves também ligar GetCursorCommitBehavior para GetCursorRollbackBehavior verificar o suporte para preservação do cursor.
Para mais informações sobre transações, consulte o artigo Transação (ODBC).
Example
Consulte o artigo Transação: Realizar uma Transação num Conjunto de Registos (ODBC).
CDatabase::BindParameters
Sobrescrita BindParameters quando precisas de associar parâmetros antes de chamar CDatabase::ExecuteSQL.
virtual void BindParameters(HSTMT hstmt);
Parâmetros
hstmt
O handle da instrução ODBC para o qual pretende atribuir parâmetros.
Observações
Esta abordagem é útil quando não precisa do conjunto de resultados de um procedimento armazenado.
No seu override, chame SQLBindParameters as funções ODBC relacionadas para atribuir os parâmetros. A MFC chama o seu override antes da sua chamada para ExecuteSQL. Não precisa de chamar SQLPrepare; ExecuteSQL chama SQLExecDirect e destrói o hstmt, que é usado apenas uma vez.
CDatabase::Cancel
Chame esta função membro para solicitar que a fonte de dados cancele uma operação assíncrona em curso ou um processo de um segundo thread.
void Cancel();
Observações
Note-se que as classes ODBC MFC já não utilizam processamento assíncrono; para realizar uma operação assíncrona, deve chamar diretamente a função SQLSetConnectOptionAPI ODBC . Para mais informações, consulte Execução Assíncrona.
CDatabase::CanTransact
Chame esta função membro para determinar se a base de dados permite transações.
BOOL CanTransact() const;
Valor de retorno
Não nulo se os conjuntos de registos que usam este CDatabase objeto permitirem transações; caso contrário 0.
Observações
Para informações sobre transações, consulte o artigo Transação (ODBC).
CDatabase::CanUpdate
Chame esta função membro para determinar se o CDatabase objeto permite atualizações.
BOOL CanUpdate() const;
Valor de retorno
Diferente de zero se o CDatabase objeto permitir atualizações; caso contrário 0, indicando ou que passou TRUE quando bReadOnly abriu o CDatabase objeto ou que a própria fonte de dados é apenas de leitura. A fonte de dados é apenas de leitura se uma chamada à função SQLGetInfo API ODBC para SQL_DATASOURCE_READ_ONLY devolver y.
Observações
Nem todos os drivers suportam atualizações.
CDatabase::CDatabase
Constrói um CDatabase objeto.
CDatabase();
Observações
Depois de construir o objeto, deve chamar a sua OpenEx função ou Open membro para estabelecer uma ligação a uma fonte de dados especificada.
Pode achar conveniente incorporar o CDatabase objeto na sua classe de documentos.
Example
Este exemplo ilustra o uso CDatabase em uma CDocumentclasse derivada de .
// This fragment is taken from the declaration for CMyDatabaseDoc
// CMyDatabaseDoc is derived from CDocument.
public:
// Declare a CDatabase embedded in the document
CDatabase m_dbCust;
// Initialize when needed
CDatabase *CMyDatabaseDoc::GetDatabase()
{
// Connect the object to a data source
if (!m_dbCust.IsOpen() && !m_dbCust.OpenEx(NULL))
return NULL;
return &m_dbCust;
}
CDatabase::Close
Chame esta função membro se quiser desligar de uma fonte de dados.
virtual void Close();
Observações
Deve fechar quaisquer conjuntos de registos associados ao CDatabase objeto antes de chamar esta função membro. Como Close não destrói o CDatabase objeto, pode reutilizá-lo abrindo uma nova ligação à mesma fonte de dados ou a uma fonte diferente.
Todos os extratos pendentes AddNew ou Edit extratos de conjuntos de registos que utilizam a base de dados são cancelados, e todas as transações pendentes são revertidas. Quaisquer conjuntos de registos dependentes do CDatabase objeto ficam num estado indefinido.
Example
// Close the current connection
m_dbCust.Close();
// Perhaps connect the object to a
// different data source
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"));
CDatabase::CommitTrans
Chame esta função de membro ao concluir as transações.
BOOL CommitTrans();
Valor de retorno
Não nula se as atualizações forem confirmadas com sucesso; caso contrário, 0. Se CommitTrans falhar, o estado da fonte de dados é indefinido. Deve verificar os dados para determinar o seu estado.
Observações
Uma transação consiste numa série de chamadas para as AddNewfunções , Edit, Delete, e Update membros de um CRecordset objeto que começou com uma chamada para a BeginTrans função membro.
CommitTrans compromete a transação. Por defeito, as atualizações são confirmadas imediatamente; A chamada BeginTrans faz com que o compromisso de atualizações seja adiado até CommitTrans ser chamado.
Até chamar CommitTrans para terminar uma transação, pode chamar a Rollback função membro para abortar a transação e deixar a fonte de dados no seu estado original. Para iniciar uma nova transação, ligue BeginTrans novamente.
Para mais informações sobre transações, consulte o artigo Transação (ODBC).
Example
Consulte o artigo Transação: Realizar uma Transação num Conjunto de Registos (ODBC).
CDatabase::ExecuteSQL
Chame esta função membro quando precisar de executar um comando SQL diretamente.
void ExecuteSQL(LPCTSTR lpszSQL);
Parâmetros
lpszSQL
Apontador para uma string terminada por null contendo um comando SQL válido para executar. Pode passar um CString.
Observações
Crie o comando como uma cadeia terminada por nulo.
ExecuteSQL não devolve registos de dados. Se quiseres operar em registos, usa antes um objeto de conjunto de registos.
A maioria dos seus comandos para uma fonte de dados é emitida através de objetos de conjunto de registos, que suportam comandos para selecionar dados, inserir novos registos, eliminar registos e editar registos. No entanto, nem toda a funcionalidade ODBC é suportada diretamente pelas classes da base de dados, pelo que por vezes poderá ser necessário fazer uma chamada SQL direta com ExecuteSQL.
Example
try
{
m_dbCust.ExecuteSQL(
_T("UPDATE Taxes ")
_T("SET Rate = '36' ")
_T("WHERE Name = 'Federal'"));
}
catch (CDBException *pe)
{
// The error code is in pe->m_nRetCode
pe->ReportError();
pe->Delete();
}
CDatabase::GetBookmarkPersistence
Chame esta função membro para determinar a persistência dos favoritos num objeto do conjunto de registos após certas operações.
DWORD GetBookmarkPersistence() const;
Valor de retorno
Uma máscara de bits que identifica as operações através das quais os marcadores persistem num objeto de registo. Para obter detalhes, consulte Observações.
Observações
Por exemplo, se chamar CRecordset::GetBookmark e depois chamar CRecordset::Requery, o marcador obtido de GetBookmark pode deixar de ser válido. Deves ligar GetBookmarkPersistence antes de ligar CRecordset::SetBookmark.
A tabela seguinte lista os valores da máscara de bits que podem ser combinados para o valor de retorno de GetBookmarkPersistence.
| Valor da máscara de bits | Persistência dos marcadores |
|---|---|
SQL_BP_CLOSE |
Os marcadores são válidos após uma Requery operação. |
SQL_BP_DELETE |
O marcador de uma linha é válido após uma Delete operação nessa linha. |
SQL_BP_DROP |
Os marcadores são válidos após uma Close operação. |
SQL_BP_SCROLL |
Os marcadores são válidos após qualquer Move operação. Isto simplesmente identifica se os favoritos são suportados no conjunto de registos, conforme devolvido por CRecordset::CanBookmark. |
SQL_BP_TRANSACTION |
Os favoritos são válidos após uma transação ser comprometida ou revertida. |
SQL_BP_UPDATE |
O marcador de uma linha é válido após uma Update operação nessa linha. |
SQL_BP_OTHER_HSTMT |
Os marcadores associados a um objeto de registos são válidos num segundo conjunto de registos. |
Para mais informações sobre este valor de retorno, consulte a função SQLGetInfo API ODBC no SDK do Windows. Para mais informações sobre favoritos, consulte o artigo Recordet: Bookmarks and Absolute Positions (ODBC).
CDatabase::GetConnect
Chame esta função membro para recuperar a cadeia de ligação usada durante a chamada para OpenEx ou Open que ligou o CDatabase objeto a uma fonte de dados.
const CString GetConnect() const;
Valor de retorno
A contendo constCString a cadeia de ligação se OpenEx ou Open tiver sido chamada; caso contrário, uma cadeia vazia.
Observações
Veja CDatabase::Open uma descrição de como a cadeia de ligação é criada.
CDatabase::GetCursorCommitBehavior
Chame esta função membro para determinar como uma CommitTrans operação afeta os cursores em objetos de registos abertos.
int GetCursorCommitBehavior() const;
Valor de retorno
Um valor que indica o efeito das transações em objetos de registos abertos. Para obter detalhes, consulte Observações.
Observações
A tabela seguinte lista os possíveis valores de retorno para GetCursorCommitBehavior e o efeito correspondente no conjunto de registos abertos.
| Valor de retorno | Efeito nos CRecordset objetos |
|---|---|
SQL_CB_CLOSE |
Ligue CRecordset::Requery imediatamente após o commit da transação. |
SQL_CB_DELETE |
Ligue CRecordset::Close imediatamente após o commit da transação. |
SQL_CB_PRESERVE |
Proceder normalmente com CRecordset as operações. |
Para mais informações sobre este valor de retorno, consulte a função SQLGetInfo API ODBC no SDK do Windows. Para mais informações sobre transações, consulte o artigo Transação (ODBC).
CDatabase::GetCursorRollbackBehavior
Chame esta função membro para determinar como uma Rollback operação afeta os cursores em objetos de registos abertos.
int GetCursorRollbackBehavior() const;
Valor de retorno
Um valor que indica o efeito das transações em objetos de registos abertos. Para obter detalhes, consulte Observações.
Observações
A tabela seguinte lista os possíveis valores de retorno para GetCursorRollbackBehavior e o efeito correspondente no conjunto de registos abertos.
| Valor de retorno | Efeito nos CRecordset objetos |
|---|---|
SQL_CB_CLOSE |
Ligue CRecordset::Requery imediatamente após a reversão da transação. |
SQL_CB_DELETE |
Ligue CRecordset::Close imediatamente após a reversão da transação. |
SQL_CB_PRESERVE |
Proceder normalmente com CRecordset as operações. |
Para mais informações sobre este valor de retorno, consulte a função SQLGetInfo API ODBC no SDK do Windows. Para mais informações sobre transações, consulte o artigo Transação (ODBC).
CDatabase::GetDatabaseName
Chame esta função membro para recuperar o nome da base de dados atualmente ligada (desde que a fonte de dados defina um objeto nomeado chamado "base de dados").
CString GetDatabaseName() const;
Valor de retorno
A contendo o nome da base de dados se for CString bem-sucedido; caso contrário, um vazio CString.
Observações
Isto não é o mesmo que o nome da fonte de dados (DSN) especificado na OpenEx chamada ou.Open O que GetDatabaseName retorna depende do ODBC. Em geral, uma base de dados é um conjunto de tabelas. Se esta entidade tiver um nome, devolve-o GetDatabaseName .
Pode, por exemplo, querer mostrar este nome num título. Se ocorrer um erro ao recuperar o nome do ODBC, devolve GetDatabaseName um .CString
CDatabase::IsOpen
Chame esta função membro para determinar se o CDatabase objeto está atualmente ligado a uma fonte de dados.
BOOL IsOpen() const;
Valor de retorno
Não nulo se o CDatabase objeto estiver atualmente ligado; caso contrário, 0.
CDatabase::m_hdbc
Contém um handle público para uma ligação de fonte de dados ODBC — um "handle de conexão".
Observações
Normalmente, não será necessário aceder diretamente a esta variável membro. Em vez disso, o framework aloca o handle quando chama OpenEx ou Open. O framework desaloca o handle quando chamas o delete operador no CDatabase objeto. Note que a Close função membro não desaloca a alavanca.
Em algumas circunstâncias, no entanto, pode ser necessário usar a maçaneta diretamente. Por exemplo, se precisar de chamar funções API ODBC diretamente em vez de através da classe CDatabase, pode precisar de um handle de ligação para passar como parâmetro. Veja o exemplo do código abaixo.
Example
// Using m_hdbc for a direct ODBC API call.
// m_dbCust is the CDatabase object; m_hdbc is
// its HDBC member variable
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
CDatabase::OnSetOptions
O framework chama esta função membro ao executar diretamente uma instrução SQL com a ExecuteSQL função membro.
virtual void OnSetOptions(HSTMT hstmt);
Parâmetros
hstmt
A instrução ODBC identifica quais opções estão a ser definidas.
Observações
CRecordset::OnSetOptions também chama a esta função de membro.
OnSetOptions define o valor de tempo limite de login. Se já houve chamadas anteriores para a SetQueryTimeout função membro and, OnSetOptions reflete os valores atuais; caso contrário, define valores por defeito.
Observação
Antes do MFC 4.2, OnSetOptions também definia o modo de processamento para snychrono ou assíncrono. A partir do MFC 4.2, todas as operações são síncronas. Para realizar uma operação assíncrona, deve fazer uma chamada direta à função SQLSetPosAPI ODBC .
Não precisa de sobrescrever OnSetOptions para alterar o valor de timeout. Em vez disso, para personalizar o valor de timeout da consulta, chame SetQueryTimeout antes de criar um conjunto de registos; OnSetOptions usará o novo valor. Os valores definidos aplicam-se a operações subsequentes em todos os conjuntos de registos ou chamadas SQL diretas.
Anula OnSetOptions se quiseres definir opções adicionais. O seu override deve chamar a classe OnSetOptions base antes ou depois de chamar a função SQLSetStmtOptionAPI ODBC . Siga o método ilustrado na implementação padrão do framework de OnSetOptions.
CDatabase::Open
Chame esta função membro para inicializar um objeto recém-construído CDatabase .
virtual BOOL Open(
LPCTSTR lpszDSN,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T("ODBC;"),
BOOL bUseCursorLib = TRUE);
Parâmetros
lpszDSN
Especifica um nome de fonte de dados — um nome registado no ODBC através do programa ODBC Administrator. Se um valor DSN for especificado em lpszConnect (na forma "DSN=<data-source>"), não deve ser especificado novamente em lpszDSN. Neste caso, lpszDSN deveria ser NULL. Caso contrário, pode passar NULL se quiser apresentar ao utilizador uma caixa de diálogo de Fonte de Dados onde o utilizador pode selecionar uma fonte de dados. Para mais informações, ver Observações.
bExclusive
Não suportado nesta versão da biblioteca de classes. Atualmente, uma asserção falha se este parâmetro for TRUE. A fonte de dados é sempre aberta como partilhada (não exclusiva).
bReadOnly
TRUE Se pretende que a ligação seja só de leitura e proibir atualizações da fonte de dados. Todos os conjuntos de registos dependentes herdam este atributo. O valor predefinido é FALSE.
lpszConnect
Especifica uma cadeia de ligação. A cadeia de ligação concatena informação, possivelmente incluindo um nome da fonte de dados, um ID de utilizador válido na fonte de dados, uma cadeia de autenticação de utilizador (palavra-passe, se a fonte de dados exigir) e outras informações. Toda a cadeia de ligação deve ser precedida pela corda "ODBC;" (maiúsculas ou minúsculas). A "ODBC;" cadeia é usada para indicar que a ligação é a uma fonte de dados ODBC; isto é para compatibilidade ascendente quando versões futuras da biblioteca de classes possam suportar fontes de dados não ODBC.
bUseCursorLib
TRUE se quiseres que a DLL da Biblioteca de Cursores ODBC seja carregada. A biblioteca de cursores mascara alguma funcionalidade do driver ODBC subjacente, impedindo efetivamente o uso de dinasets (se o driver os suportar). Os únicos cursores suportados se a biblioteca de cursores estiver carregada são instantâneos estáticos e cursores apenas para avançar. O valor predefinido é TRUE. Se planeia criar um objeto de conjunto de registos diretamente sem CRecordset derivar dele, não deve carregar a biblioteca de cursores.
Valor de retorno
Não nula se a ligação for feita com sucesso; caso contrário, 0 se o utilizador escolher Cancelar quando lhe é apresentada uma caixa de diálogo a pedir mais informações de ligação. Em todos os outros casos, o quadro faz uma exceção.
Observações
O seu objeto de base de dados deve ser inicializado antes de o poder usar para construir um objeto de conjunto de registos.
Observação
Chamar a OpenEx função membro é a forma preferida de se ligar a uma fonte de dados e inicializar o seu objeto de base de dados.
Se os parâmetros da sua Open chamada não conterem informação suficiente para fazer a ligação, o driver ODBC abre uma caixa de diálogo para obter a informação necessária do utilizador. Quando chama Open, a sua cadeia de ligação, lpszConnect, é armazenada privadamente no CDatabase objeto e está disponível ao chamar a GetConnect função membro.
Se quiser, pode abrir a sua própria caixa de diálogo antes de ligar Open para obter informações do utilizador, como uma palavra-passe, e depois adicionar essa informação à cadeia de ligação que passa para Open. Ou talvez queiras guardar a string de ligação que passaste para a poderes reutilizar da próxima vez que a tua aplicação chamar Open um CDatabase objeto.
Também pode usar a string de ligação para múltiplos níveis de autorização de login (cada um para um objeto diferente CDatabase ) ou para transmitir outra informação específica da fonte de dados. Para mais informações sobre cadeias de ligação, consulte o Capítulo 5 no SDK do Windows.
É possível que uma ligação tente expirar se, por exemplo, o host do SGBD não estiver disponível. Se a tentativa de ligação falhar, Open lança um CDBException.
Example
// m_dbCust is a CDatabase object embedded in a CDocument class
if (bDefault)
{
// Connect the object to a data source (no password)
// the ODBC connection dialog box will always remain hidden
m_dbCust.Open(_T("MFC_ODBCTest"), FALSE, FALSE, _T("ODBC;UID=JOES"));
}
else
{
// ...Or, query the user for all connection information
m_dbCust.Open(NULL);
}
CDatabase::OpenEx
Chame esta função membro para inicializar um objeto recém-construído CDatabase .
virtual BOOL OpenEx(
LPCTSTR lpszConnectString,
DWORD dwOptions = 0);
Parâmetros
lpszConnectString
Especifica uma cadeia de ligação ODBC. Isto inclui o nome da fonte dos dados, bem como outras informações opcionais, como um ID de utilizador e palavra-passe. Por exemplo, "DSN=SQLServer_Source;UID=SA;PWD=abc123" é uma possível cadeia de ligação. Note que, se passar NULL por lpszConnectString, uma caixa de diálogo Fonte de Dados irá pedir ao utilizador para selecionar uma fonte de dados.
dwOptions
Uma máscara de bits que especifica uma combinação dos seguintes valores. O valor padrão é 0, o que significa que a base de dados será aberta como partilhada com acesso de escrita, a DLL da Biblioteca de Cursores ODBC não será carregada, e a caixa de diálogo de ligação ODBC só será exibida se não houver informação suficiente para fazer a ligação.
CDatabase::openExclusiveNão suportado nesta versão da biblioteca de classes. Uma fonte de dados é sempre aberta como partilhada (não exclusiva). Atualmente, uma afirmação falha se especificar esta opção.CDatabase::openReadOnlyAbra a fonte de dados como apenas leitura.CDatabase::useCursorLibCarregue a DLL da Biblioteca de Cursor ODBC. A biblioteca de cursores mascara alguma funcionalidade do driver ODBC subjacente, impedindo efetivamente o uso de dinasets (se o driver os suportar). Os únicos cursores suportados se a biblioteca de cursores estiver carregada são instantâneos estáticos e cursores apenas para avançar. Se planeia criar um objeto de conjunto de registos diretamente semCRecordsetderivar dele, não deve carregar a biblioteca de cursores.CDatabase::noOdbcDialogNão mostre a caixa de diálogo de ligação ODBC, independentemente de ser fornecida informação suficiente da ligação.CDatabase::forceOdbcDialogMostra sempre a caixa de diálogo de ligação ODBC.
Valor de retorno
Não nula se a ligação for feita com sucesso; caso contrário, 0 se o utilizador escolher Cancelar quando lhe é apresentada uma caixa de diálogo a pedir mais informações de ligação. Em todos os outros casos, o quadro faz uma exceção.
Observações
O seu objeto de base de dados deve ser inicializado antes de o poder usar para construir um objeto de conjunto de registos.
Se o lpszConnectString parâmetro na sua OpenEx chamada não contiver informação suficiente para fazer a ligação, o driver ODBC abre uma caixa de diálogo para obter a informação necessária do utilizador, desde que não tenha definido CDatabase::noOdbcDialog ou CDatabase::forceOdbcDialog incluído o dwOptions parâmetro. Quando chama OpenEx, a sua cadeia de ligação, lpszConnectString, é armazenada privadamente no CDatabase objeto e está disponível ao chamar a GetConnect função membro.
Se quiser, pode abrir a sua própria caixa de diálogo antes de ligar OpenEx para obter informações do utilizador, como uma palavra-passe, e depois adicionar essa informação à cadeia de ligação que passa para OpenEx. Ou talvez queiras guardar a string de ligação que passaste para a poderes reutilizar da próxima vez que a tua aplicação chamar OpenEx um CDatabase objeto.
Também pode usar a string de ligação para múltiplos níveis de autorização de login (cada um para um objeto diferente CDatabase ) ou para transmitir outra informação específica da fonte de dados. Para mais informações sobre cadeias de ligação, consulte o Capítulo 6 na Referência do Programador ODBC.
É possível que uma ligação tente expirar se, por exemplo, o host do SGBD não estiver disponível. Se a tentativa de ligação falhar, OpenEx lança um CDBException.
Example
// m_dbCust is a CDatabase object embedded in a CDocument class.
// Connect the object to a read-only data source where
// the ODBC connection dialog box will always remain hidden
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"),
CDatabase::openReadOnly | CDatabase::noOdbcDialog);
CDatabase::Rollback
Chame esta função membro para reverter as alterações feitas durante uma transação.
BOOL Rollback();
Valor de retorno
Não nula se a transação for revertida com sucesso; caso contrário, 0. Se uma Rollback chamada falhar, a fonte de dados e os estados da transação ficam indefinidos. Se Rollback devolver 0, deve verificar a fonte de dados para determinar o seu estado.
Observações
Todas as CRecordsetAddNewchamadas , Edit, Delete, e Update chamadas executadas desde a última BeginTrans são revertidas para o estado existente na altura dessa chamada.
Após uma chamada para Rollback, a transação termina e deve ligar BeginTrans novamente para outra transação. O registo que estava atualizado antes de ligares BeginTrans torna-se novamente o registo atual depois Rollbackde .
Após um rollback, o registo que estava atual antes do rollback mantém-se atual. Para detalhes sobre o estado do conjunto de registos e da fonte de dados após um rollback, consulte o artigo Transação (ODBC).
Example
Consulte o artigo Transação: Realizar uma Transação num Conjunto de Registos (ODBC).
CDatabase::SetLoginTimeout
Chame esta função membro — antes de chamar OpenEx ou Open — para sobrepor o número padrão de segundos permitidos antes de uma tentativa de ligação à fonte de dados expirar.
void SetLoginTimeout(DWORD dwSeconds);
Parâmetros
dwSeconds
O número de segundos a permitir antes de uma tentativa de ligação termina.
Observações
Uma tentativa de ligação pode expirar se, por exemplo, o SGBD não estiver disponível. Chame SetLoginTimeout depois de construir o objeto não inicializado CDatabase , mas antes de chamar OpenEx ou Open.
O valor padrão para os tempos de espera de login é 15 segundos. Nem todas as fontes de dados suportam a capacidade de especificar um valor de timeout de login. Se a fonte de dados não suportar timeout, obtém-se saída de traço, mas não é exceção. Um valor de 0 significa "infinito".
CDatabase::SetQueryTimeout
Chame esta função membro para sobrepor o número padrão de segundos e permitir o tempo de expiração das operações subsequentes na fonte de dados conectadas.
void SetQueryTimeout(DWORD dwSeconds);
Parâmetros
dwSeconds
O número de segundos a permitir antes de uma tentativa de consulta termina.
Observações
Uma operação pode expirar devido a problemas de acesso à rede, tempo excessivo de processamento de consultas, e assim por diante. Ligue SetQueryTimeout antes de abrir o seu conjunto de registos ou antes de chamar o AddNewconjunto de registos ou UpdateDelete as funções membros se quiser alterar o valor de tempo de espera da consulta. A definição afeta todos os subsequentes Open, AddNew, Update, e Delete chamadas a quaisquer conjuntos de registos associados a este CDatabase objeto. Alterar o valor de timeout da consulta para um conjunto de registos após a abertura não altera o valor do conjunto de registos. Por exemplo, operações subsequentes Move não usam o novo valor.
O valor padrão para os tempos de espera da consulta é 15 segundos. Nem todas as fontes de dados suportam a capacidade de definir um valor de timeout de consulta. Se definir um valor de timeout de consulta igual a 0, não ocorre timeout; A comunicação com a fonte de dados pode deixar de responder. Este comportamento pode ser útil durante o desenvolvimento. Se a fonte de dados não suportar timeout, obtém-se saída de traço, mas não é exceção.