2016-08-04 14 views
0

IFステートメントをCall Expiry部分にステップインすることはできませんが、それはelseに渡されるため、私は自分の状態に何か問題があると仮定できます。SQLを使用してIF条件に問題がある

私がアクセステーブル投資データWHEREお客様番号から契約状況を取得しようとしているが、現在のスプレッドシート上のお客様番号です。 (スプレッドシートには顧客番号が1つしかありません)。

ロジックに問題がありますか、SELECTステートメントは文字列ではないものを返しますか?

ご協力いただきありがとうございます。

If ("SELECT [Contract Status] FROM [Investment Data] WHERE [Customer Number] =(" & "SELECT [Customer Number] FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh & ")") = "Current" Then 
     expiryPrompt = MsgBox("A previous entry from the same contract is currently active, would you like to expire current active contract?", vbYesNo, "Confirmation") 
     Call Expiry 
     Exit Sub 
    Else 
     MsgBox ("Entry has been entered into the database.") 
     cN.Execute ssql 
     Exit Sub 
    End If 

編集1:私は

Dim cdb As DAO.Database 
Dim rst As DAO.Recordset 
Dim strSQL As String 
Dim temp As String 

strSQL = "SELECT [Contract Status] FROM [Investment Data] WHERE [Customer Number] =(" & _ 
"SELECT [Customer Number] FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh & ")" 

Set cdb = DAO.OpenDatabase(dbPath) 
Set rst = cdb.OpenRecordset(strSQL) 
temp = rst 

次いるSELECTを保存しようとしているという点で、私はレコードセットの戻り値は、私がどれだけ私を知らないStringではありません知っていますそれを変数に格納します。

+0

あなたは 'STRING'比較をやっています。連結したSQLは決して ''現在の ''と同じではありません。クエリの*結果*を ''現在の ''と比較しようとしていますか? – Comintern

+1

すべてを1行で実行しないでください。また、実際にSQLクエリを実行しているようには見えません。クエリを実行し、結果を変数に書き込むと、それをトラブルシューティングすることができます。 – teylyn

+0

@Cominternはい '' SELECT'文の結果を '' Current "'と比較しようとしています – mYxCHa

答えて

0

ifステートメントで値を比較できるように値を入力する必要があります。あなたが望むものが分かったら、これを試してみてください。また、SQL文で1つの結果が得られると仮定しています。

Set conn = New ADODB.Connection 
    Set rs = New ADODB.Recordset 
    conn.Open sConnString 
    Set rs.ActiveConnection = conn 


    strSQL = "SELECT [Contract Status] FROM [Investment Data] WHERE 
    [Customer Number] =(" & "SELECT [Customer Number] FROM 
     [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh & ")" 

    rs.Open strSQL 
     If Not rs.EOF Then xx = rs.GetRows Else 'do you code for not getting result 
    rs.Close 

    If xx(0, 0) = "Current" Then 
     expiryPrompt = MsgBox("A previous entry from the same contract is currently active, would you like to expire current active contract?", vbYesNo, "Confirmation") 
     Call Expiry 
     Exit Sub 
    Else 
     MsgBox ("Entry has been entered into the database.") 
     cN.Execute ssql 
     Exit Sub 
    End If 

私はデータベースにアクセスする私の方法に従うために、if文の中のあなたのコードを修正していません。

あなたの質問にお答えします。 結果は変数に転記されます。複数の行または列にアクセスする場合は、このようなことをする必要があります。列を取得するための行を取得するための

 For i = 0 To 9 

      Cells(i + 1, 1) = x(0, i) 

     Next i 

 For i = 0 To 9 

      Cells(1, i + 1) = x(i, 0) 

     Next i 
+0

' SELECT'が返されるケースがありますいくつかは期限切れであり、現在のものです。このケースでは、最初の行のみをチェックし、他の行は「現在」であるかどうかを確認しません。どのように私はコードに実装するだろう。さもなければ、これは完全に機能する乾杯! – mYxCHa

+0

@mYxCHa、これがあなたの質問に答えるならば、投票して解決してください。あなたの質問については、更新された回答の編集を参照してください。 – KyloRen

+0

xx(0、i + 1)= "Current" Then Call Expiry'の場合にループを実装しようとしましたが、添え字が範囲外です。私は実行しているし、存在しない何かの上に 'IF'があるので、私はこれが何であるか知っています。私は 'rs.RecordCount'を試しましたが、これは' Long'を返すので、 'FOR'ループで使うことはできませんでした。 – mYxCHa

関連する問題