ApriCantiere3="SELECT " & _
"`t_fatture`.`idf`,`t_cantieri`.`nome`, `t_fatture`.`mittente`, `t_fatture`.`dataf`, " & _
"`t_fatture`.`costo`, `t_catspese`.`spese`, `t_documenti`.`documento` " & _
"FROM" & _
"`t_cantieri` INNER JOIN" & _
"`t_fatture` ON `t_cantieri`.`Id` = `t_fatture`.`idc` INNER JOIN " & _
"`t_catspese` ON `t_catspese`.`Idcs` = `t_fatture`.`idcs` INNER JOIN " & _
"`t_documenti` ON `t_documenti`.`Idd` = `t_fatture`.`iddoc` " & _
"WHERE `t_cantieri`.`Id` ="

StringaSQL=ApriCantiere&" WHERE `t_cantieri`.`Id` ="&cantiere
prima usi la variabile ApriCantiere3, poi invece usi ApriCantiere che non si sa da dove venga, poi se pure fosse la stessa variabile, metti due volte la Where.. insomma, se dici che in locale funziona, vuol dire che questa che hai postato è scritta male, forse hai sbagliato mentre la copiavi qui sul forum