Create View mit ADO



  • Kann ich mit ADO Views od. zumindesten Tabellen erstellen?
    Geht das mit dem was MFC bietet oder nur mit Erweiterungen von dritten?
    Wenn das nicht geht, heisst das, dass ich in diesen String, den man für das Select verwendet, auch wirklich nur Selects reinschreiben kann? Die anderen Befehle ruft man ja anders aus.
    Welche von den eventuellen Erweiterungen wäre zu empfehlen?
    Was für Alternativen gibt es generell?

    Hier noch etwas möchtgern-code:

    ::CoInitialize(NULL);
    
    	// Variablen XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    	CString strConnect,strQuery[10];
    
    	_CommandPtr cmd;		//command object
    	_RecordsetPtr rs;		//recordset object
    	_ConnectionPtr conn;	//connection object
    	// NULL vom Typ Variant erzeugen
    	_variant_t vNull;
    	vNull.vt = VT_ERROR;
    	vNull.scode = DISP_E_PARAMNOTFOUND;
    
    	//create instance of Command, Connection and Recordset.
    	cmd.CreateInstance( __uuidof(Command));
    	rs.CreateInstance(__uuidof(Recordset));
    	conn.CreateInstance(__uuidof(Connection));
    
    	// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    	strConnect="Data Source=PostgreSQL";
    
    	strQuery[2]="CREATE VIEW test2 (arg int, brg int)"; //<-- das da soll gehen :-)
    	strQuery[3]="SELECT * FROM test";
    
    	conn->CursorLocation = adUseClient;
    	conn->Open(_bstr_t( strConnect.GetBuffer(0)),L"", L"", -1);
    	cmd->ActiveConnection = conn;	
    
    	cmd->CommandText = strQuery[2].GetBuffer(0);
    	cmd->CommandText = strQuery[3].GetBuffer(0);		
    
    	// Commanobjekt festlegen
    	rs->PutRefSource(cmd); 
    	// Recordset öffnen
    	rs->Open(vNull, vNull, adOpenDynamic, adLockOptimistic, adCmdUnknown); 
    
    	m_DG2.SetRefDataSource(NULL);
    	m_DG2.SetRefDataSource( (LPUNKNOWN) rs );
    	m_DG2.Refresh();
    	UpdateData(FALSE);
    
    	//rs->Close(); 
    	//conn->Close();
    	::CoUninitialize();
    

    Mach ich hier generell "ungute" Sachen?

    wow, das waren jetzt ne menge fragen



  • Ich antworte mir mal.
    Man muss in dem Code oben bloss zulassen, das er die Abfragen auch bearbeiten kann (ohrfeig). Also ein wenig die Zeilen vertauschen:

    cmd->CommandText = strQuery[0].GetBuffer(0);	
    	rs->PutRefSource(cmd); 
    	rs->Open(vNull, vNull, adOpenDynamic, adLockOptimistic, adCmdUnknown);
    
    	cmd->CommandText = strQuery[1].GetBuffer(0);	
    	rs->PutRefSource(cmd); 
    	rs->Open(vNull, vNull, adOpenDynamic, adLockOptimistic, adCmdUnknown);
    

Anmelden zum Antworten