Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-03-2010
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
En D2010, mensaje de error...

Qué tal, estoy migrando a D2010 y de entrada obtengo este primer error en una pequeña aplicación.

Línea:

Código:
  if Pos(Column.FieldName, QAkg.SQL[QAkg.SQL.Count-2]) <> 0 then
    ...
Mensaje de error:

[DCC Error] Historial.pas(51): E2251 Ambiguous overloaded call to 'Pos'
System.pas(16698): Related method: function Pos(const WideString; const WideString): Integer;
System.pas(18389): Related method: function Pos(const string; const string): Integer;

FieldName es de tipo System.WideString y SQL de tipo TStrings.

Tengo entendido que dentro de TStrings tengo Strings, no cadenas tipo C. Cómo puedo solucionar este inconveniente?
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #2  
Antiguo 18-03-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
No sé cómo será la función Pos en D2010, pero si es como en D7...

Código Delphi [-]
function Pos(Substr: string; S: string): Integer;

Es decir que sólo acepta cadenas (sean Ansi o wide).

El error, sonspecho yo, viene de ahí.

Básicamente el mensaje de error significa:

1. No hay una función Pos que acepte una cadena y un TStrings.
2. El compilador encontró una función Pos que recibe dos WideStrings.
3. El compilador encontró una función Pos que recibe dos strings.
Responder Con Cita
  #3  
Antiguo 18-03-2010
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Creo que el misterio se debe al tratamiento de cadenas UNICODE por Delphi 2010. LA función Pos ha sido sobreescrita para tratar los datos de los antiguos string (ahora AnsiString) y los nuevos Unicode (ahora String a secas).

Creo que puedes anular la ambigüedad haciendo un Casting al tipo deseado

Un saludo
Responder Con Cita
  #4  
Antiguo 18-03-2010
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Como te han indicado ya, se debe al tratamiento de cadenas UNICODE por Delphi 2010.
Deberías hacer un casting de uno de los dos parámetros de la función.

Prueba esto:
Código Delphi [-]
  if Pos(Column.FieldName, WideString(QAkg.SQL[QAkg.SQL.Count-2])) <> 0 then
    ...
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 18-03-2010 a las 13:10:23.
Responder Con Cita
  #5  
Antiguo 04-04-2010
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Bueno, hacer cast al string contenido en el TStrings para convertirlo a WideString era la solución. Muchas gracias.

Por otra parte...

Cita:
Empezado por ElKurgan Ver Mensaje
...Casting al tipo deseado
...me quedé pensando en si el tipo querría participar de un casting para saber si lo contratábamos o no... Je je
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #6  
Antiguo 05-04-2010
pabloloustau pabloloustau is offline
Miembro
 
Registrado: dic 2009
Posts: 56
Poder: 15
pabloloustau Va por buen camino
a mi me pasa lo mismo. compilo una aplicacion aunque no tenga nada de codigo añadido y me sale este error. intente reinstalando el delphi 2010 y sigue el error. me quede sin programar. saben cual prodria ser el problema??

Checking project dependencies...
Compiling Project1.dproj (Debug configuration)
[DCC Fatal Error] Project1.dpr(1): F1027 Unit not found: 'System.pas' or binary equivalents (.dcu)
Responder Con Cita
  #7  
Antiguo 05-04-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Hola,

efectivamente, la solución pasa por hacer un Cast al Variant (segundo parámetro) que pasabas a la función Pos en tu ejemplo.

Pero, por si alguien tiene interés, este problema (que aparece ya en Delphi 2009) no es por el tratamiento de las cadenas UNICODE.

De hecho, la llamada podría haberse realizado perfectamente de este modo:

Código Delphi [-]
if Pos(Column.FieldName, QAkg.SQL.Strings[QAkg.SQL.Count-2]) <> 0 then
El asunto, como bien explica Marco Cantú en su libro Delphi 2009 HandBook (pag. 213) es porque a partir de Delphi 2009 se controla, de forma más estricta, el paso de parámetros Variant a funciones que definen parámetros de un tipo concreto (no Variant).

En Delphi 2007 esta llamada podría haber dado un error en Runtime. Ahora, el error se produce en el momento de la compilación.

Si alguien tiene más interés, creo que lo justo es aconsejaos comprar el libro (que también está en castellano).

Saludos.

Última edición por yapt fecha: 05-04-2010 a las 00:52:52. Razón: Modificado el código Delphi...
Responder Con Cita
  #8  
Antiguo 05-04-2010
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Interesante el aporte. Muchas gracias.

Ahh y para pabloloustau creo que deberías hacer tu pregunta en un nuevo hilo.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
dll dbexpress d2010 pborges36 Conexión con bases de datos 2 12-01-2010 16:26:53
Activación D2010 mlara Varios 6 08-01-2010 16:53:38
Mensaje de error: Abstract Error Almd Internet 2 29-08-2008 00:32:12
Un mensaje de error FGarcia Varios 4 11-10-2006 01:47:14
Mensaje de error BDE Lakecountry Conexión con bases de datos 10 19-07-2006 17:29:48


La franja horaria es GMT +2. Ahora son las 05:01:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi