1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_dbaccess.hxx" 26 27 28 #if defined(WNT) 29 #if defined _MSC_VER 30 #pragma warning(push, 1) 31 #pragma warning(disable: 4917) 32 #endif 33 #include "msdasc.h" // OLE DB Service Component header 34 #if defined _MSC_VER 35 #pragma warning(push, 1) 36 #endif 37 #include "stdio.h" 38 39 #include <initguid.h> // Include only once in your application 40 #include <adoid.h> // needed for CLSID_CADOConnection 41 #include <adoint.h> // needed for ADOConnection 42 43 #ifndef _DBAUI_ADO_DATALINK_HXX_ 44 #include "adodatalinks.hxx" 45 #endif 46 47 BSTR PromptEdit(long hWnd,BSTR connstr); 48 BSTR PromptNew(long hWnd); 49 50 ::rtl::OUString getAdoDatalink(long hWnd,::rtl::OUString& oldLink) 51 { 52 ::rtl::OUString dataLink; 53 if (oldLink.getLength()) 54 { 55 dataLink=reinterpret_cast<sal_Unicode *>(PromptEdit(hWnd,(BSTR)oldLink.getStr())); 56 } 57 else 58 dataLink=reinterpret_cast<sal_Unicode *>(PromptNew(hWnd)); 59 return dataLink; 60 } 61 BSTR PromptNew(long hWnd) 62 { 63 BSTR connstr=NULL; 64 HRESULT hr; 65 IDataSourceLocator* dlPrompt = NULL; 66 ADOConnection* piTmpConnection = NULL; 67 BSTR _result=NULL; 68 69 // Initialize COM 70 ::CoInitialize( NULL ); 71 72 // Instantiate DataLinks object. 73 hr = CoCreateInstance( 74 CLSID_DataLinks, //clsid -- Data Links UI 75 NULL, //pUnkOuter 76 CLSCTX_INPROC_SERVER, //dwClsContext 77 IID_IDataSourceLocator, //riid 78 (void**)&dlPrompt //ppvObj 79 ); 80 if( FAILED( hr ) ) 81 { 82 piTmpConnection->Release( ); 83 dlPrompt->Release( ); 84 return connstr; 85 } 86 87 dlPrompt->put_hWnd(hWnd); 88 if( FAILED( hr ) ) 89 { 90 piTmpConnection->Release( ); 91 dlPrompt->Release( ); 92 return connstr; 93 } 94 95 // Prompt for connection information. 96 hr = dlPrompt->PromptNew((IDispatch **)&piTmpConnection); 97 98 if( FAILED( hr ) || !piTmpConnection ) 99 { 100 dlPrompt->Release( ); 101 return connstr; 102 } 103 104 hr = piTmpConnection->get_ConnectionString(&_result); 105 if( FAILED( hr ) ) 106 { 107 piTmpConnection->Release( ); 108 dlPrompt->Release( ); 109 return connstr; 110 } 111 112 piTmpConnection->Release( ); 113 dlPrompt->Release( ); 114 CoUninitialize(); 115 return _result; 116 } 117 118 BSTR PromptEdit(long hWnd,BSTR connstr) 119 { 120 HRESULT hr; 121 IDataSourceLocator* dlPrompt = NULL; 122 ADOConnection* piTmpConnection = NULL; 123 BSTR _result=NULL; 124 125 // Initialize COM 126 ::CoInitialize( NULL ); 127 128 hr = CoCreateInstance(CLSID_CADOConnection, 129 NULL, 130 CLSCTX_INPROC_SERVER, 131 IID_IADOConnection, 132 (LPVOID *)&piTmpConnection); 133 if( FAILED( hr ) ) 134 { 135 piTmpConnection->Release( ); 136 return connstr; 137 } 138 139 140 hr = piTmpConnection->put_ConnectionString(connstr); 141 if( FAILED( hr ) ) 142 { 143 piTmpConnection->Release( ); 144 return connstr; 145 } 146 147 // Instantiate DataLinks object. 148 hr = CoCreateInstance( 149 CLSID_DataLinks, //clsid -- Data Links UI 150 NULL, //pUnkOuter 151 CLSCTX_INPROC_SERVER, //dwClsContext 152 IID_IDataSourceLocator, //riid 153 (void**)&dlPrompt //ppvObj 154 ); 155 if( FAILED( hr ) ) 156 { 157 piTmpConnection->Release( ); 158 dlPrompt->Release( ); 159 return connstr; 160 } 161 162 dlPrompt->put_hWnd(hWnd); 163 if( FAILED( hr ) ) 164 { 165 piTmpConnection->Release( ); 166 dlPrompt->Release( ); 167 return connstr; 168 } 169 170 VARIANT_BOOL pbSuccess; 171 172 // Prompt for connection information. 173 hr = dlPrompt->PromptEdit((IDispatch **)&piTmpConnection,&pbSuccess); 174 if( SUCCEEDED( hr ) && sal_False == pbSuccess ) //if user press cancel then sal_False == pbSuccess 175 { 176 piTmpConnection->Release( ); 177 dlPrompt->Release( ); 178 return connstr; 179 } 180 181 if( FAILED( hr ) ) 182 { 183 // Prompt for new connection information. 184 piTmpConnection->Release( ); 185 piTmpConnection = NULL; 186 hr = dlPrompt->PromptNew((IDispatch **)&piTmpConnection); 187 if( FAILED( hr ) || !piTmpConnection ) 188 { 189 dlPrompt->Release( ); 190 return connstr; 191 } 192 } 193 194 hr = piTmpConnection->get_ConnectionString(&_result); 195 if( FAILED( hr ) ) 196 { 197 piTmpConnection->Release( ); 198 dlPrompt->Release( ); 199 return connstr; 200 } 201 202 piTmpConnection->Release( ); 203 dlPrompt->Release( ); 204 CoUninitialize(); 205 return _result; 206 } 207 #endif 208