2012-03-13 1 views
0

SQL-запрос в ado работает нормально, только если столбец Sect присутствует в листе ADODC1.
Если на листе ADODC1 нет Sect, то он вызывает ошибку.
Pls исправить мою ниже запрос ...Проблема в ADO-excel, SQL-запрос

strSQL = "Select Name,Dept,IIF(ISNULL(Sect),'',Sect) AS Sect from [Adodc1$] UNION Select Name,Dept,Sect from [Adodc2$];" 

Если Sect колонке нет в ADODC1 листе, нужны результаты, как пустой.

+2

Вы всегда можете запустить «выбрать * из adodc1 $ Где 1 = 2» первое: что позволит вам проверить поле имена в возвращаемом пустом наборе записей для требуемого столбца перед запуском основного запроса. –

+0

@Tim Я бы хотел, чтобы вы опубликовали это как ответ. – Fionnuala

+0

@Remou: смотреть связанный вопрос. – onedaywhen

ответ

2

Что вы подразумеваете под «нужны результаты как пустые». Если вы закончите ошибку, вы получите закрытый набор записей. Это «пусто»?

Я подозреваю, что это то, что вам нужно сделать (псевдо-код):

On Error Resume Next 
strSQL = "Select Name,Dept,IIF(ISNULL(Sect),'',Sect) AS Sect from [Adodc1$]" & _ 
      " UNION Select Name,Dept,Sect from [Adodc2$];" 

Set rs = cn.Execute(strSQL) 

If rs.State <> adStateOpen Then 

    strSQL = "Select Name,Dept,NULL AS Sect from [Adodc1$]" & _ 
      " UNION Select Name,Dept,Sect from [Adodc2$];" 

    Set rs = cn.Execute(strSQL) 

    If rs.State <> adStateOpen Then 

     ' Deeper problems...