Hola!
No confundas los checkboxes, porque no son booleanos, ya que aunque tu lo veas como "marcado/no marcado" (true/false), realmente son numéricos, porque te devuelve 1 ó 0. Te recuerdo que puedes configurar un checkbox para que te devuelva un 2. Para verlo, despliega la propiedad Value de un checkbox cualquiera y verás que tiene las siguientes posibilidades:
0 - Unchecked
1 - Checked
2 - Grayed
Por eso no puede ser booleano. Tampoco lo confundas con que apunte a un campo booleano, porque sigue devolviendo un número (de hecho, un Integer, 16 bits), y debes hacer la conversión a mano.
La forma correcta es hacer la concatenación comparando la propiedad Value con 1 ó 0, y puedes hacerlo en una única línea (como te recomendé, con IIf), o en varias instrucciones como esta, una por cada control:
Código:
....
SQL = SQL & ", TipoComprobante="
If ChkTC.Value = 1 Then
SQL = SQL & "True"
Else
SQL = SQL & "False"
End If
SQL = SQL & ", Comprobante="
If ChkC.Value = 1 Then...
Las dos formas son igual de buenas... y las únicas. Lo normal además es que las bases de datos no consideren "1" como "True" de forma automática.