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.
Conformidade
Versão Introduzida: Normas ODBC 1.0 Conformidade: ISO 92
Summary
O SQLFreeStmt interrompe o processamento associado a uma instrução específica, fecha quaisquer cursores abertos associados à instrução, descarta resultados pendentes ou, opcionalmente, liberta todos os recursos associados ao handle da instrução.
Syntax
SQLRETURN SQLFreeStmt(
SQLHSTMT StatementHandle,
SQLUSMALLINT Option);
Arguments
HandleStatement
[Entrada] Handler da instrução
Opção
[Entrada] Uma das seguintes opções:
SQL_ FECHAR: Fecha o cursor associado ao StatementHandle (se estiver definido) e descarta todos os resultados pendentes. A aplicação pode reabrir este cursor mais tarde, executando novamente uma instrução SELECT com os mesmos valores de parâmetro ou valores diferentes. Se nenhum cursor estiver aberto, esta opção não tem efeito para a aplicação. O SQLCloseCursor também pode ser chamado para fechar um cursor. Para mais informações, veja Fechar o Cursor.
SQL_DROP: Esta opção está obsoleta. Uma chamada ao SQLFreeStmt com uma opção de SQL_DROP é mapeada no Gestor de Drivers para SQLFreeHandle.
SQL_UNBIND: Define o campo de SQL_DESC_COUNT do ARD para 0, libertando todos os buffers de coluna vinculados por SQLBindCol para o dado StatementHandle. Isto não desvincula a coluna de marcadores; para isso, o campo SQL_DESC_DATA_PTR do ARD para a coluna de favoritos é definido como NULL. Note que, se esta operação for realizada num descritor explicitamente alocado que é partilhado por mais do que uma instrução, a operação afetará as ligações de todas as instruções que partilham o descritor. Para mais informações, consulte Visão Geral sobre Obtenção de Resultados (Básico).
SQL_RESET_PARAMS: Define o campo SQL_DESC_COUNT do APD para 0, libertando todos os buffers de parâmetros definidos pelo SQLBindParameter para o StatementHandle dado. Se esta operação for realizada num descritor explicitamente alocado que é partilhado por mais do que uma instrução, esta operação afetará as ligações de todas as instruções que partilham o descritor. Para mais informações, consulte Parâmetros de Ligação.
Devoluções
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR ou SQL_INVALID_HANDLE.
Diagnósticos
Quando SQLFreeStmt retorna SQL_ERROR ou SQL_SUCCESS_WITH_INFO, um valor SQLSTATE associado pode ser obtido chamando SQLGetDiagRec com um HandleType de SQL_HANDLE_STMT e um Handle de StatementHandle. A tabela seguinte lista os valores SQLSTATE normalmente devolvidos pelo SQLFreeStmt e explica cada um no contexto desta função; a notação "(DM)" precede as descrições dos SQLSTATEs devolvidas pelo Gestor de Drivers. O código de retorno associado a cada valor SQLSTATE é SQL_ERROR, salvo indicação em contrário.
| SQLSTATE | Erro | Descrição |
|---|---|---|
| 01000 | Aviso geral | Mensagem informativa específica para o condutor. (Função devolve SQL_SUCCESS_WITH_INFO.) |
| HY000 | Erro geral | Ocorreu um erro para o qual não existia um SQLSTATE específico e para o qual não estava definido nenhum SQLSTATE específico da implementação. A mensagem de erro devolvida pelo SQLGetDiagRec no buffer *MessageText descreve o erro e a sua causa. |
| HY001 | Erro de alocação de memória | O driver não conseguia alocar a memória necessária para suportar a execução ou conclusão da função. |
| HY010 | Erro de sequência de funções | (DM) Uma função de execução assíncrona era chamada para o handle de ligação associado ao StatementHandle. Esta função assíncrona ainda estava a ser executada quando o SQLFreeStmt foi chamado. (DM) SQLExecute, SQLExecDirect ou SQLMoreResults era chamado para o StatementHandle e devolvido SQL_PARAM_DATA_AVAILABLE. Esta função era chamada com a opção definida para SQL_RESET_PARAMS antes de os dados serem recuperados para todos os parâmetros transmitidos. (DM) Uma função de execução assíncrona era chamada para o StatementHandle e ainda estava a correr quando esta função foi chamada. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations ou SQLSetPos era chamado para o StatementHandle e devolvido SQL_NEED_DATA. Esta função era chamada antes de os dados serem enviados para todos os parâmetros ou colunas de dados na execução. |
| HY013 | Erro de gestão de memória | A chamada de função não podia ser processada porque os objetos de memória subjacentes não podiam ser acedidos, possivelmente devido a condições de baixa memória. |
| HY092 | Tipo de opção fora do alcance | (DM) O valor especificado para o argumento Opção não era: SQL_CLOSE SQL_DROP SQL_UNBIND SQL_RESET_PARAMS |
| HYT01 | Expirou o tempo limite de ligação | O período de timeout da ligação expirou antes de a fonte de dados responder ao pedido. O período de tempo de expiração da ligação é definido através do SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | O driver não suporta esta função | (DM) O driver associado ao StatementHandle não suporta a função. |
Comments
Chamar SQLFreeStmt com a opção SQL_CLOSE é equivalente a chamar SQLCloseCursor, exceto que SQLFreeStmt com SQL_CLOSE não afeta a aplicação se não houver cursor aberto na instrução. Se não houver cursor aberto, uma chamada ao SQLCloseCursor devolve SQLSTATE 24000 (estado do cursor inválido).
Uma aplicação não deve usar um handle de instrução depois de ter sido libertado; o Gestor de Drivers não verifica a validade de um handle numa chamada de função.
Example
É uma boa prática de programação libertar handles. No entanto, para simplificar, o exemplo seguinte não inclui código que liberte os handles alocados. Para um exemplo de como libertar handles, veja Função SQLFreeHandle.
// SQLFreeStmt.cpp
// compile with: user32.lib odbc32.lib
#include <windows.h>
#include <sqlext.h>
int main() {
// declare and initialize the environment, connection, statement handles
SQLHENV henv = NULL; // Environment
SQLHDBC hdbc = NULL; // Connection handle
SQLHSTMT hstmt = NULL; // Statement handle
SQLRETURN retCode;
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
SQLCHAR connStrbuffer[1024];
SQLSMALLINT connStrBufferLen;
retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, -1);
retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
retCode = SQLDriverConnect(hdbc, desktopHandle, (SQLCHAR *)"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1024 + 1, &connStrBufferLen, SQL_DRIVER_PROMPT);
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
retCode = SQLFreeStmt(hstmt, SQL_CLOSE);
retCode = SQLFreeStmt(hstmt, SQL_UNBIND);
retCode = SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
}
Funções relacionadas
| Para obter informações sobre | Veja |
|---|---|
| Atribuição de uma alça | Função SQLAllocHandle |
| Cancelamento do processamento de extratos | Função SQLCancel |
| Fechar um cursor | Função Cursor SQLCloseCursor |
| Libertar uma pega | Função SQLFreeHandle |
| Definir um nome de cursor | Função SQLSetCursorName |