Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Usando o provedor OLE DB para SQL Server e chamar a função CCommand::Prepare() ATL ou ICommandPrepare::Prepare(), retornará E_FAIL com a seguinte descrição do erro:
Violação de acesso ou erro sintaxe.
O SQL Server provedor OLE DB que vem com o MDAC 2.7 retorna a seguinte mensagem de erro aprimorada:
Informações de parâmetro não podem ser derivadas de instruções SQL com consultas sub-select. Definir informações de parâmetro antes de preparar comando.
Você deve chamar CCommand::SetParameterInfo() ou ICommandWithParameters::SetParameterInfo() antes de chamar Prepare().
Consulte a seção mais informações deste artigo para obter um exemplo de código que usa os modelos de consumidor ATL OLE DB e demonstra SetParameterInfo() chamada.
Criar duas tabelas em um banco de dados do Microsoft SQL Server: Tabela1 deve ter um campo de caractere e um campo inteiro, Tabela2 deve ter somente um campo inteiro.
Crie uma classe acessador semelhante à seguinte:
class CQuery1Accessor
{
public:
TCHAR m_field1[11];
LONG m_field2;
LONG m_field1param;
BEGIN_COLUMN_MAP(CQuery1Accessor)
COLUMN_ENTRY(1, m_field1)
COLUMN_ENTRY(2, m_field2)
END_COLUMN_MAP()
BEGIN_PARAM_MAP(CQuery1Accessor)
COLUMN_ENTRY(1,m_field1param)
END_PARAM_MAP()
DEFINE_COMMAND(CQuery1Accessor, _T("SELECT * FROM Table1 WHERE field2 IN"
"(SELECT field1 FROM Table2 where field1 > ?)"));
// You may want to call this function if you are inserting a record and want to
// initialize all the fields, if you are not going to explicitly set all of them.
void ClearRecord()
{
memset(this, 0, sizeof(*this));
}
};
Crie uma classe CCommand que executa o comando usando a classe de acessador que recém-criado. A classe CCommand deve semelhante ao seguinte:
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 235053
(http://support.microsoft.com/kb/235053/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
Diga-nos o porque e o que podemos fazer para melhorar esta informação
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.