conectar a sql server 2000

57 views
Skip to first unread message

gattorno

unread,
Jun 10, 2010, 2:59:30 PM6/10/10
to symfony-es
hola a todos. tengo una duda y es que yo tengo mi proyecto montado en
windows y usando como bd postgre y quisiera que en un módulo
determinado mi aplicación se conectara a un servidor de ms sql 2000 y
extrajera un conjunto de datos para trabajar con ellos y la
informacion resultante guardarla en la bd en postgre. Alguien me puede
dar al menos una idea de como lo podria hacer. Uso symfony 1.4.5.
Gracias a todos de antemano por conformar esta gran comunidad. chao.

gattorno

unread,
Jun 10, 2010, 3:04:05 PM6/10/10
to symfony-es

gattorno

unread,
Jun 10, 2010, 3:07:25 PM6/10/10
to symfony-es

Julian Reyes Escrigas

unread,
Jun 10, 2010, 5:17:25 PM6/10/10
to symfo...@googlegroups.com
Hola

Yo tuve un problema en el que debía conectarme a otra base de datos para migrar la aplicación antigua a la de symfony, el problema lo solución es sencilla pero en la conexión a la base de datos extranjera te toca conectarte como lo harías si fueras a hacer una aplicación sin framework.

Digamos que creas un modulo de migración (hipotéticamente) en este tienes una acción de este modulo es donde yo ubicaba la conexión de la base de datos y recorría los datos y creaba los nuevos objetos en la base de datos del proyecto de symfony, también lo hice para importar desde .csv

-----Mensaje original-----
De: symfo...@googlegroups.com [mailto:symfo...@googlegroups.com] En nombre de gattorno
Enviado el: jueves, 10 de junio de 2010 2:07 PM
Para: symfony-es
Asunto: [symfony-es] conectar a sql server 2000

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a symfo...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a symfony-es+...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/symfony-es?hl=es.

Manel

unread,
Jun 11, 2010, 6:13:22 AM6/11/10
to symfony-es
En databases.yml:

slqserverdb:
class: sfPropelDatabase
param:
classname: MssqlPropelPDO
phptype: mssql
dsn: 'dblib:host=mihost;dbname=database'
username: usuario
password: password
encoding:
pooling: false

y en sqlserverdb.schema.yml defines las tablas que tienes en
sqlserver2000. Ojo, que según como sea tu modelo de datos puedes tener
problemas con el uso de Ids.

Ojo porque te encontrarás un problema con las últimas versiones de
propel, que estan configuradas para SQLServer 2005, que tiene una
serie de mejoras como ROW_NUM que no tiene sqlserver 2000. Para que no
te den problemas, deberías cambiar la función applyLimit del fichero
DBMSSQL.php por la que te pongo debajo. Si trabajas con SQLServer
2005, en rpincipio no tendrás ese problema.

public function applyLimit(&$sql, $offset, $limit)
{
// make sure offset and limit are numeric
if (!is_numeric($offset) || !is_numeric($limit)){
throw new Exception("DBMSSQL ::applyLimit() expects a number for
argument 2 and 3");
}

// obtain the original select statement
preg_match('/\A(.*)select(.*)from/si',$sql,$select_segment);
if (count($select_segment)>0)
{
$original_select = $select_segment[0];
} else {
throw new Exception("DBMSSQL ::applyLimit() could not locate the
select statement at the start of the query. ");
}
$modified_select = substr_replace($original_select, null,
stristr($original_select,'select') , 6 );

// obtain the original order by clause, or create one if there
isn't one
preg_match('/order by(.*)\Z/si',$sql,$order_segment);
if (count($order_segment)>0)
{
$order_by = $order_segment[0];
} else {

// no order by clause, if there are columns we can attempt to
sort by the columns in the select statement
$select_items = split(',',$modified_select);
if (count($select_items)>0)
{
$item_number = 0;
$order_by = null;
while ($order_by === null &&
$item_number<count($select_items))
{
if ($select_items[$item_number]!='*' && !
strstr($select_items[$item_number],'('))
{
$order_by = 'order by ' . $select_items[0] . ' asc';
}
$item_number++;
}
}
if ($order_by === null)
{
throw new Exception("DBMSSQL ::applyLimit() could not locate
the order by statement at the end of your query or any columns at the
start of your query. ");
} else {
$sql.= ' ' . $order_by;
}

}

// remove the original select statement
$sql = str_replace($original_select , null, $sql);

/* modify the sort order by for paging */
$inverted_order = '';
$order_columns = split(',',str_ireplace('order by ','',
$order_by));
$original_order_by = $order_by;
$order_by = '';
foreach ($order_columns as $column)
{
// strip "table." from order by columns
$column = array_reverse(split("\.",$column));
$column = $column[0];

// commas if we have multiple sort columns
if (strlen($inverted_order)>0){
$order_by.= ', ';
$inverted_order.=', ';
}

// put together order for paging wrapper
if (stristr($column,' desc'))
{
$order_by .= $column;
$inverted_order .= str_ireplace(' desc',' asc',$column);
} elseif (stristr($column,' asc')) {
$order_by .= $column;
$inverted_order .= str_ireplace(' asc',' desc',$column);
} else {
$order_by .= $column;
$inverted_order .= $column .' desc';
}
}
$order_by = 'order by ' . $order_by;
$inverted_order = 'order by ' . $inverted_order;

// build the query
$offset = ($limit+$offset);
$modified_sql = 'select * from (';
$modified_sql.= 'select top '.$limit.' * from (';
$modified_sql.= 'select top '.$offset.' '.$modified_select.$sql;
$modified_sql.= ') deriveda '.$inverted_order.') derivedb '.
$order_by;
$sql = $modified_sql;
Reply all
Reply to author
Forward
0 new messages