passarito Posted October 16, 2012 at 06:08 PM Report #479388 Posted October 16, 2012 at 06:08 PM (edited) Boas a todos, Hoje não venho perguntar nada, apenas ajudar a comunidade, alertando para um problema que tive e provavelmente mais alguém teve ou possa vir a ter. Então versa assim: Estou a trabalhar num site, em ASP, claro, que faz a gestão de bases de dados em MS Access em DSN-Less. Esta tem um campo booleano. Que é aqui que está o problema todo.... Ora, quando quero inserir um registo ou alterar o campo booleano de forma directa, isto é através da própria variavel, se estiver a correr o IIS em inglês não tenho qualquer problema, mas se por outro lado o IIS estiver correr em português gera o erro seguinte: Microsoft OLE DB Provider for ODBC Drivers erro '80040e10' [Microsoft][Controlador Microsoft Access de ODBC] Poucos parâmetros. 1 esperado. Se pesquisarem um pouco sobre este erro, somos levados no sentido oposto ao real. Leva-nos a pensar que existe uma variavel com o nome errado. Uma depuração do meu código mais promenorizada levou-me a descobrir que o problema está sim no que é enviado para a base de dados, e sendo de uma forma directa o valor que vai é VERDADEIRO em vez de TRUE Assim se eu programar assim: SQLStmt = "Insert into ficha (variavel_bool) VALUES(" & var_bool & ")" Em português vai dar o erro pois vai assumir na variavel var_bool os valores VERDADEIRO ou FALSO O truque é programar assim: SQLStmt = "Insert into ficha (variavel_bool) VALUES(" if var_bool then SQLStmt = SQLStmt & "True" else SQLStmt = SQLStmt & "False" end if SQLStmt = SQLStmt & ")" Ah, e o mais engraçado é que a Base de dados até foi criada num MS Access em Português... portanto o contrário é que teia mais lógica... ou não! PS1 - Código corrigido Edited October 17, 2012 at 07:46 AM by passarito
jpaulino Posted October 17, 2012 at 07:17 AM Report #479444 Posted October 17, 2012 at 07:17 AM Estou a trabalhar num site, em ASP, claro, que faz a gestão de bases de dados em MS Access em DSN-Less. Esta tem um campo booleano. Que é aqui que está o problema todo.... Em ASP.NET, certo? E estás a usar uma base de dados MS Access para uma página web??? Sabes o que estás a fazer? Em português vai dar o erro pois vai assumir na variavel var_bool os valores VERDADEIRO ou FALSO E já experimentaste usar 1 e 0? Já não utilizo à algum tempo, mas deve funcionar assim (acho!): "INSERT INTO tabela (campoBooleano) VALUES (1)" "INSERT INTO tabela (campoBooleano) VALUES (0)" O truque é programar assim: Tens o código errado ... deverá ser: SQLStmt = "Insert into ficha (variavel_bool) VALUES(" if var_bool then SQLStmt = SQLStmt & "True" else SQLStmt = SQLStmt & "False" end if SQLStmt = SQLStmt & ")"
passarito Posted October 17, 2012 at 07:44 AM Author Report #479447 Posted October 17, 2012 at 07:44 AM Em ASP.NET, certo? Não, não é ASP.NET é em ASP PURO E estás a usar uma base de dados MS Access para uma página web??? Sabes o que estás a fazer? Sim, estou a usar MS Access para uma página web. Já agora, podes me explicar o porquê da tua admiração? É que nunca tive qualquer problema, mas se há algum problema diz aí. E qual a base de dados que se deva usar. Eu aprendi ASP de uma forma autodidata, admito que há coisas (muitas) que me passam ao lado! Quanto ao 0/1 e True/False eu sabia disso, mas prefiro sempre o True/False. A nível de entendimento de código mais tarde será sempre mais fácil se estiver programado com True/False Também queria agradecer pela correcção do código.
jpaulino Posted October 17, 2012 at 08:29 AM Report #479449 Posted October 17, 2012 at 08:29 AM Sim, estou a usar MS Access para uma página web. Já agora, podes me explicar o porquê da tua admiração? É que nunca tive qualquer problema, mas se há algum problema diz aí. E qual a base de dados que se deva usar. Eu aprendi ASP de uma forma autodidata, admito que há coisas (muitas) que me passam ao lado! O MS Access não é um SGBD (não gere tão bem as ligações em sites com algum trafego, gestão de memória, segurança, etc), não permite usar nenhum ORM para mapeamento de objectos, tem vários casos em que a base de dados corrompe, etc. É sempre aconselhavel usar SQL Server, MySQL, Oracle, etc.
passarito Posted October 17, 2012 at 09:59 AM Author Report #479462 Posted October 17, 2012 at 09:59 AM @jpaulino, obrigado pelo esclarecimento. Da tua explicação estou a depreender que o problema que tenho no Delphi com as Bases de Dados em MS Access em que a barra de deslocamento vertical não funciona convenientemente, poderá ser pelo que explicaste. Voltando ao ASP/Access, tenho as minhas BD em Access a trabalhar à cerca de 10 anos e nunca tive qualquer problema de ficarem corrompidas, memória ou qualquer outro excepto o de segurança em que se houve algum problema eu não dei por ele! Vou colocar aqui os pontos positivos pelos quais uso as Bases de Dados Access em DSN-Less: - Não necessito de servidor que disponibilize SQL, o que fica mais barato na WEB e numa intranet o servidor ou PC fica mais leve. - Coloco as BD nas pastas que me apetecem e direcciono a programação para lá. Num ASP posso ter as BD que quiser nas pastas que quiser ao mesmo tempo. - Posso facilmente testar em intranet em qualquer computador e depois de tudo a funcionar bem actualizar todo o site. Não sei se os outros permitem estas facilidades, há algum tempo atrás ponderei passar para MySQL, mas obrigava-me a ter as BD todas no mesmo local e desisti logo. Não sei se será mesmo assim ou se foi algo que não descobri como se faz. Já na altura fiz uma pesquisa entre o DSN e o DSN-Less e achei o DSN-less melhor. The results...These tests showed that DSN-less connections were slightly faster than System DSN connections. The increase in performance was nothing monumental; the greatest performance boost was a mere 13% faster with 64 concurrent requests. For one, two, or four concurrent requests, there was virtually no performance improvement. In fact, no noticeable improvement is seen in a DSN-less connection over a System DSN until there are 10 or more concurrent connections. in http://www.4guysfromrolla.com/webtech/070399-1.shtmlou http://www.stardeveloper.com/articles/display.html?article=2000120101&page=1 Nota: Com isto tudo, não estou a discordar de ti, longe disso!!!, apenas estou a mostrar as razões pelo qual uso as coisas desta forma, mas estou sempre aberto a mudanças!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now