domingo, 4 de agosto de 2013

ODBC + SQL Server + Linux

É possível conectar-se a diversos bancos de dados via ODBC no Linux, de forma semelhante ao Windows.  Este artigo explica como conectar-se ao SQL Server via ODBC.

Para começar, é preciso instalar os seguintes pacotes: FreeTDS, UnixODBC e tdsodbc. No Debian, isso é feito com o seguinte comando:

sudo apt-get install freetds-bin unixodbc tdsodbc

Naturalmente, isso também funciona no Ubuntu. Em outras distros, você deverá instalar os pacotes equivalentes.

Feito isso, deverão surgir dois arquivos vazios, que só podem ser editados pelo root:
  • /etc/odbcinst.ini - Neste arquivo ficarão os caminhos dos drivers odbc;
  • /etc/odbc.ini - Aqui ficarão os DSNs (os dados das conexões);
O passo seguinte é encontrar o driver da FreeTDS, um arquivo de nome "libtdsodbc.so". Essa é uma parte chata, porque o arquivo pode estar em vários lugares diferentes, dependendo da distro, e você vai ter que procurar. No Debian Wheezy 32 bits, ele está na pasta /usr/lib/i386-linux-gnu/odbc/ .  Tendo achado o driver, edite o arquivo odbcinst.ini (como root) da seguinte forma:

[FreeTDS]
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so

Lembrando que o caminho do driver poderá ser diferente no seu caso. O nome em colchetes é o identificador do driver, que será usado a seguir.  Altere agora o arquivo odbc.ini para que fique mais ou menos assim:

[padaria]
Driver = FreeTDS
Description = Servidor da padaria
Trace = No
Server = 234.56.78
Database = padariadb
Port = 1433
TDS_Version = 7.0

Há uma série de detalhes aqui. O nome entre colchetes é o identificador DSN. O nome do driver tem que coincidir com o indentificador do arquivo odbcinst.ini.  "Trace" está negativada para dizer que não terá arquivo de log (isso pode ou não ser desejado). Logo em seguida vêm o endereço (ou nome) do servidor, o nome do banco, a porta e a versão do protocolo. A porta padrão do SQL Server é 1433. O protocolo 7.0 funciona para todos os SQL Server versão 2000 ou superior.

Pronto! Você já pode invocar uma conexão ODBC pelo DSN "padaria".

sábado, 27 de julho de 2013

Criando .ISO a partir de uma pasta no Debian

Dica rápida: é possível criar uma imagem ISO com o conteúdo de uma pasta no Debian. Basta usar o comando abaixo:

genisoimage -o nome_da_imagem.iso caminho_da_pasta

A mesma coisa pode ser feita em outras distros usando o comando mkisofs.

sexta-feira, 5 de julho de 2013

Alterando o ambiente desktop padrão no Debian

Você pode ter vários ambientes de Desktop instalados simultaneamente no Debian. Mas um deles será considerado padrão, ou seja, aquele que é aberto se nenhum outro for escolhido na tela de login. Além disso, você pode ter apenas um display manager padrão, que será responsável pela própria tela de login.

Para trocar a sessão padrão, use o seguinte comando no terminal, como root:

update-alternatives --config x-session-manager 

Para trocar o display manager padrão, basta instalar o que você quer. Se quiser, depois, voltar para o display manager original, basta digitar o seguinte comando, também como root:

dpkg-reconfigure gdm

Considerando, no caso, que você quer voltar para o display manager do Gnome, o gdm.

terça-feira, 25 de junho de 2013

Várias formas de se conectar a SQL Server em PHP

Prosseguindo na série de posts sobre PHP e SQL Server, vou listar aqui as diversas formas de se conectar ao banco de dados da Microsoft a partir de código em PHP. Em todos os exemplos o servidor se chama padaria-server, o usuário é padeiro e a senha é pão francês. Os exemplos com ODBC supõem a existência de uma conexão ODBC chamada "Padaria".

Funções MSSQL

$conn = mssql_connect("padaria-server","padeiro","pão francês");

A função mssql_connect permite conexão direta ao banco, mas não está disponível em versões de PHP posteriores à 5.3.

Funções ODBC

$conn = odbc_connect("DSN=Padaria","padeiro","pão francês");

A função odbc_connect e sua família executam consultas a qualquer banco, desde que o respectivo driver OBDC esteja instalado. Adicionar uma conexão ODBC é uma tarefa fácil no Windows, mas é muito trabalhosa no Linux e, em si, já é assunto para um post futuro. Essa família de funções já vem compilada com a versão PHP do Windows e não exige modificação do arquivo php.ini.

Conexão direta com a PDO

Isso pode ser feito de pelo menos três formas, dependendo do sistema operacional e da versão do PHP.

sábado, 22 de junho de 2013

Ajeitando a tela depois de usar o DOSBox

Após jogar no DOSBox no Linux Debian, pode acontecer de a resolução da tela cair para o tamanho da resolução do jogo. Isso é provavelmente algum problema na configuração do DOSBox, ou do OpenGL, ou ainda pode ser por causa de um driver de vídeo ruim. Seja como for, fica muito difícil voltar à configuração original apenas pela interface gráfica, porque os ícones ficam grandões e as janelas não aparecem por completo em uma resolução de, digamos, 320x240.

A solução é, em primeiro lugar, começar o DOSBox pelo terminal (abra o terminal e digite "dosbox"). Assim, quando o programa finalizar, você poderá digitar o seguinte comando:

xrandr -s 1600x900

Obviamente você deverá mudar o valor da resolução (1600x900, no meu caso) para a sua própria.

terça-feira, 18 de junho de 2013

Contando linhas do resultado com odbc_num_rows

A função odbc_num_rows teoricamente mostra o número de linhas retornadas em uma consulta ODBC. Usando com o SQL Server, no entanto, ela normalmente retorna -1.

No meu caso de teste, notei que ela funciona corretamente se a consulta tiver um TOP. Por exemplo, "Select top 100 nome from aluno" irá retornar o número correto de alunos, desde que seja menor do que 100. O macete é usar um top com um valor muito mais alto do que o esperado para obter o valor correto.

quinta-feira, 13 de junho de 2013

PHP + MSSQL + WinXP

Se você tentar baixar a versão mais nova de PHP e usá-la para se conectar a um banco SQL Server, você poderá entrar em apuros ao utilizar código antigo. O problema é que as funções da família mssql_* foram cortadas de PHP a partir da versão 5.3.

A Microsoft disponibiliza uns dlls que trazem umas funções novas (não documentadas no site oficial de PHP) e o módulo PDO, mas eles não vêm com as funções mssql. Além disso, esses dlls não podem ser instalados em nenhuma versão do Windows anterior ao 7 ou Server 2008.

No meu caso, eu tive que conectar PHP a um banco SQL Server 2000 que rodava em um Windows Server 2003. Os dlls da Microsoft simplesmente não podiam ser usados.

A solução foi trocar as funções mssql para as funções odbc_*, que são praticamente idênticas. As diferenças são as seguintes:
  • Todas as funções começam com odbc_;
  • A função odbc_exec é equivalente à mssql_query, mas exige que o primeiro argumento seja a conexão. No caso da mssql_query, isso podia ser omitido;
  • No meu caso de teste, a função odbc_num_rows sempre retorna -1, o que significa que você não tem como saber a priori se uma consulta trouxe resultados ou não;
Pra finalizar as funções odbc de PHP já vem compiladas com a própria linguagem na versão para Windows, de forma que não é preciso mudar nada no PHP.ini. Se você quiser usar essas funções no linux, então será preciso instalar algumas coisas e fazer um bocado de configurações que são assunto para um post futuro.

Está vivo!

Está criado então o Preguiça de Programar!

O objetivo deste blog é trazer dicas de coisas aleatórias do mundo da computação para tentar ajudar colegas que encontrem os mesmos problemas que eu. Especificamente, vou postar aqui a solução de problemas chatos que me tomarem muito tempo pra resolver.

Para cada problema vou tentar fazer um passo-a-passo que seja simples, mas suficientemente geral para que sirva a um bom número de pessoas.

O título é um trocadilho com as funções de expressão regular de PHP.