Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-07-2007
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Exclamation sentencia SQL erronea!!!

quiero sacar los RFC de una tabla (Paradox) de empleados con el siguiente codigo
Código SQL [-]
SELECT nombres, apellidoPaterno, apellidoMaterno, FechaNacimiento, 
Left(apellidoPaterno,1) + IIF(Mid(apellidoPaterno,2,1) IN (‘A’,’E,’I’,’O’,’U’), Mid(apellidoPaterno,2,1),
IIF(Mid(apellidoPaterno,3,1) IN (‘A’,’E’,’I’,’O’,’U’),Mid(apellidoPaterno,3,1),
IIF(Mid(apellidoPaterno,4,1) IN (‘A’,’E’,’I’,’O’,’U’),Mid(apellidoPaterno,4,1),Mid(apellidoPaterno,5,1)))) 
+Left(apellidoMaterno,1)+Rigth(Cstr(Year(fechanacimiento)),2)
+IIF(Month(fechanacimiento)<10,’0’+Cstr(Month(fechanacimiento)), Cstr(Month(fechanacimiento)))+
IIF(Day(fecha de nacimiento)<10,’0’+Cstr(Day(fechanacimiento)), Cstr(Day(fechanacimiento)))
FROM Empleados

lo que pretendo es que saque el primer caracter del apellido paterno, la primer letra vocal que cuentre y el primer caracter del apellido materno y la fecha de nacimiento aa/mm/dd (año/mes/dia... 801015... 15 de octubre de 1980). el error que me marca es en el :

Invalid use of keyword
Token: Left(apellidoPaterno,1)
Line number: 2

..

de antemano muchas gracias...
Responder Con Cita
  #2  
Antiguo 05-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
mmm no te recomiendo q lo hagas en la bd.

El algoritmo para obtener el rfc tiene ciertas convinaciones que no se pueden usar.

Un ejemplo:

Si te llega una persona que se llame: Puentes Tarango Omar.....su rfc sería PU... hay ciertas palabras no validas en el RFC. el algoritmo es complejo para meterlo en una BD.
Responder Con Cita
  #3  
Antiguo 05-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Lo más recomendable es tener un campo aparte para el RFC que se capture al momento de dar de alta al empleado.
__________________

Responder Con Cita
  #4  
Antiguo 05-07-2007
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Cool aqui encontre el codigo en DELPHI...

encontre el codigo el delphi... pero incompleto (NO OBTIENE LA HOMOCLAVE Y EL DIGITO VERIFICADOR)... y no se como implementarlo en mi programa...

Código Delphi [-]
unit U_curp;
interface
uses SysUtils;
var
VLET, VPASO, VAPL1, VAPL11, VAPL2,VAPL21, VNOM, VNOM1, VRAIZ : STRING;
VFEC_ANIO, VFEC_MES, VFEC_DIA, VSEXO, VENT : STRING;
VLEN, VI: INTEGER ;
ATAB1 : array[0..18] of string = ('DA ','DAS ','DE ','DEL ','DER ','DI ','DIE ',
                                  'DD ','EL ' ,'LA ','LOS ','LAS ','LE ','LES ',
                                  'MAC ','MC ','VAN ','VON ','Y ');
ATAB2 : array[0..74] of string = ( 'BUEI','BUEY','CACA','CACO','CAGA','CAGO','CAKA',
                                   'CAKO','COGE', 'COGI', 'COJA', 'COJE', 'COJI', 'COJO',
                                   'COLA', 'CULO', 'FALO', 'FETO', 'GETA', 'GUEI', 'GUEY',
                                   'JETA', 'JOTO', 'KACA', 'KACO', 'KAGA', 'KAGO', 'KAKA',
                                   'KAKO', 'KOGE', 'KOGI', 'KOJA', 'KOJE', 'KOJI', 'KOJO',
                                   'KOLA', 'KULO', 'LILO', 'LOCA', 'LOCO', 'LOKA', 'LOKO',
                                   'MAME', 'MAMO', 'MEAR', 'MEAS', 'MEON', 'MIAR', 'MION',
                                   'MOCO', 'MOKO', 'MULA', 'MULO', 'NACA', 'NACO', 'PEDA',
                                   'PEDO', 'PENE', 'PIPI', 'PITO', 'POPO', 'PUTA', 'PUTO',
                                   'QULO', 'RATA', 'ROBA', 'ROBE', 'ROBO', 'RUIN', 'SENO',
                                   'TETA', 'VUEI', 'VUEY', 'WUEI', 'WUEY');
Procedure curp ;
Procedure P7;
Procedure P8;
Procedure P9;
Procedure P10;
Procedure P11;
Procedure P12;
implementation
uses
  Dialogs;
 
Procedure curp ;
VAR VI : INTEGER;
begin
//   *** QUITA / ' .
   VPASO := TRIM(VAPL1) ;    P8()  ;  VAPL11 := VPASO ;
   VPASO := TRIM(VAPL2) ;    P8()  ;  VAPL21 := VPASO ;
   VPASO := TRIM(VNOM ) ;    P8()  ;  VNOM1  := VPASO ;
//** QUITA CARACTERES ESPECIALES
   VPASO := VAPL11      ;    P7()  ;  VAPL11 := VPASO ;
   VPASO := VAPL21      ;    P7()  ;  VAPL21 := VPASO ;
   VPASO := VNOM1       ;    P7()  ;  VNOM1  := VPASO ;
//** QUITA MARIA Y JOSE
   VPASO := VNOM1       ;    P9()  ;  VNOM1  := VPASO ;
//** QUITA PROPOSICIONES
   VPASO := VAPL11      ;   P10()  ;  VAPL11 := VPASO ;
   VPASO := VAPL21      ;   P10()  ;  VAPL21 := VPASO ;
   VPASO := VNOM1       ;   P10()  ;  VNOM1  := VPASO ;
//*** QUITO PALABRAS COMPUESTAS
   VPASO := VAPL11      ;   P11()  ;  VAPL11 := VPASO ;
   VPASO := VAPL21      ;   P11()  ;  VAPL21 := VPASO ;
   VPASO := VNOM1       ;   P11()  ;  VNOM1  := VPASO ;
//*** CREA LAS PRIMERAS 4 LETRAS DE LA RAIZ
//*** APELLIDO PATERNO
   IF LENGTH(VAPL11) = 0  THEN   VRAIZ := 'XX'
   ELSE
      BEGIN
       VRAIZ := COPY(VAPL11,1,1);
       VLET  := 'X'  ;
       FOR VI := 2 TO LENGTH(VAPL11) DO
        begin
         IF Pos(copy(VAPL11,VI,1),'AEIOU') >0 then
            begin
            VLET := copy(VAPL11,VI,1);
            Break ; //cancela el ciclo
            end;
        end; //NEXT;
       VRAIZ := VRAIZ+VLET ;
      END;

//   *** APELLIDO MATERNO
   IF LENGTh(VAPL21) = 0 THEN VRAIZ := VRAIZ+'X'
   ELSE                       VRAIZ := VRAIZ+COPY(VAPL21,1,1);
//   *** NOMBRE
   IF LENgth(VNOM1)  = 0 then VRAIZ := VRAIZ+'X'
   ELSE                       VRAIZ := VRAIZ+copy(VNOM1 ,1,1);
   FOR VI := 1 TO 75  do
   begin
      IF VRAIZ = ATAB2[VI] then
         begin
         VRAIZ := copy(VRAIZ,1,1)+'X'+copy(VRAIZ,LENGTH(VRAIZ)-1,2);//           RIGHT(VRAIZ,2)
         Break; //EXIT
         end;
   end;

//   *** FECHA NACIMIENTO, SEXO Y E.F.
         VRAIZ := VRAIZ+VFEC_ANIO+VFEC_MES+VFEC_DIA+VSEXO+VENT ;
{         VRAIZ := VRAIZ+RIGHT(STR(VFEC_ANIO,4),2)+
         REPL('0',2-LEN(LTRIM(STR(VFEC_MES,2))))+ LTRIM(STR(VFEC_MES,2))+
         REPL('0',2-LEN(LTRIM(STR(VFEC_DIA,2))))+
         LTRIM(STR(VFEC_DIA,2))+
         VSEXO+
         VENT
 }
{   IF LEVEL1 = 2 .AND. LEVEL2 = 1
         VRAIZ = VRAIZ+RIGHT(STR(VFEC_ANIO,4),2)+REPL('0',2-LEN(LTRIM(STR(VFEC_MES,2))))+LTRIM(STR(VFEC_MES,2))+REPL('0',2-LEN(LTRIM(STR(VFEC_DIA,2))))+LTRIM(STR(VFEC_DIA,2))+VSEXO+VENT
   ELSE
      IF level1 = 1 .and. level2 = 3
         VRAIZ = VRAIZ+RIGHT(STR(VFEC_ANIO,4),2)+REPL('0',2-LEN(LTRIM(STR(VFEC_MES,2))))+LTRIM(STR(VFEC_MES,2))+REPL('0',2-LEN(LTRIM(STR(VFEC_DIA,2))))+LTRIM(STR(VFEC_DIA,2))+VSEXO+VENT
      ELSE
         VRAIZ = VRAIZ+RIGHT(STR(VFEC_ANIO,4),2)+REPL('0',2-LEN(LTRIM(STR(VFEC_MES,2))))+LTRIM(STR(VFEC_MES,2))+REPL('0',2-LEN(LTRIM(STR(VFEC_DIA,2))))+LTRIM(STR(VFEC_DIA,2))+VSEXO+VENT
      ENDIF
   ENDIF}
//   *** CONSONANTES INTERNAS
   VPASO := VAPL11   ; P12();
   VPASO := VAPL21   ; P12();
   VPASO := VNOM1    ; P12();
//   *** FIN DE RUTINAS
end;
Procedure P7;
VAR VI : INTEGER;
VLETRA : CHAR;
begin
//** SUSTITUYE CARACTERES ESPECIALES POR X
  FOR VI := 1 TO LENGTH(VPASO)  DO
                BEGIN  //ord devuelve el codigo ASCII
                   VLETRA := VPASO[VI];
     IF ((ord(VLETRA) < 65) OR (ord(VLETRA) > 90)) AND (copy(VPASO,VI,1) <> ' ') THEN
        VPASO  := COPY(VPASO,1,VI-1)+'X'+COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-VI)+1,LENGTH(VPASO)-VI) ;
  END;
end;
Procedure P8;
VAR VI : INTEGER ;
begin
//** QUITA LAS / Y '
//  VLEN = LEN(VPASO)
  FOR VI := 1 TO LENGTH(VPASO) DO
                BEGIN
     IF (COPY(VPASO,VI,1) = '/') OR (COPY(VPASO,VI,1) = #39) OR  (COPY(VPASO,VI,1) = '.') THEN
                    BEGIN
//        VLEFT  = LEFT(VPASO,VI-1)
//        VRIGHT = RIGHT(VPASO,VLEN-VI)
        VPASO  := COPY(VPASO,1,VI-1)+' '+ COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-VI)+1,LENGTH(VPASO)-VI) ;
      END;
  END;
  VPASO := TRIM(VPASO);
end;
Procedure P9;
begin
//** QUITA JOSE Y MARIA
IF (COPY(VPASO,1,4) = 'JOSE' )  AND (LENGTH(VPASO) = 4) THEN EXIT ;
IF (COPY(VPASO,1,1) = 'J'    )  AND (LENGTH(VPASO) = 1) THEN EXIT ;
IF (COPY(VPASO,1,2) = 'J '   )  AND (LENGTH(VPASO) = 2) THEN EXIT ;
IF (COPY(VPASO,1,5) = 'MARIA')  AND (LENGTH(VPASO) = 5) THEN EXIT ;
IF (COPY(VPASO,1,1) = 'M'    )  AND (LENGTH(VPASO) = 1) THEN EXIT ;
IF (COPY(VPASO,1,2) = 'M '   )  AND (LENGTH(VPASO) = 2) THEN EXIT ;
IF (COPY(VPASO,1,2) = 'MA'   )  AND (LENGTH(VPASO) = 2) THEN EXIT ;
IF (COPY(VPASO,1,3) = 'MA '  )  AND (LENGTH(VPASO) = 3) THEN EXIT ;
IF COPY(VPASO,1,5) = 'JOSE '  THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-5)+1, LENGTH(VPASO)-5);    EXIT ; END;
IF COPY(VPASO,1,3) = 'J  '    THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-3)+1, LENGTH(VPASO)-3);    EXIT ; END;
IF COPY(VPASO,1,2) = 'J '     THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-2)+1, LENGTH(VPASO)-2);    EXIT ; END;
IF COPY(VPASO,1,6) = 'MARIA ' THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-6)+1, LENGTH(VPASO)-6);    EXIT ; END;
IF COPY(VPASO,1,3) = 'M  '    THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-3)+1, LENGTH(VPASO)-3);    EXIT ; END;
IF COPY(VPASO,1,2) = 'M '     THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-2)+1, LENGTH(VPASO)-2);    EXIT ; END;
IF COPY(VPASO,1,4) = 'MA  '   THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-4)+1, LENGTH(VPASO)-4);    EXIT ; END;
IF COPY(VPASO,1,3) = 'MA '    THEN BEGIN  VPASO := COPY(VPASO,LENGTH(VPASO)-(LENGTH(VPASO)-3)+1, LENGTH(VPASO)-3);    EXIT ; END;
end;
Procedure P10;
VAR VI : INTEGER ;
begin
//** QUITA PREPOSICIONES
        VI := 0;
        WHILE VI < 20 DO
 //FOR VI := 1 TO 19 DO
        BEGIN
           VI := VI+1 ;
    IF COPY(VPASO,1,LENGTH(ATAB1[VI])) = ATAB1[VI] THEN
              BEGIN
       VPASO := TRIM(COPY(VPASO, LENGTH(VPASO)-(LENGTH(VPASO)-LENGTH(ATAB1[VI]))+1,LENGTH(VPASO)-LENGTH(ATAB1[VI])));
          VI := 1 ;
       END;
 END;
end;

Procedure P11;
VAR VI : INTEGER;
begin
//** QUITA PALABRAS COMPUESTAS
 FOR VI := 1 TO LENGTH(VPASO) DO
        BEGIN
    IF COPY(VPASO,VI,1) = ' ' THEN
              BEGIN
       VPASO := COPY(VPASO,1,VI-1);
       EXIT;
              END;
        END;
end;
Procedure P12;
VAR VLET : STRING;
VI : INTEGER;
begin
//** CONSONANTES INTERNAS
      //  MessageDlg('VPASO= '+VPASO , mtWarning, [mbOK], 0);
 IF LENGTH(VPASO) = 0 THEN  VRAIZ := VRAIZ+'X'
 ELSE
         BEGIN
    VLET := 'X' ;
    FOR VI := 2 TO LENGTH(VPASO) DO
           BEGIN
       IF POS(COPY(VPASO,VI,1),'BCDFGHJKLMNPQRSTVWXYZ')>0 THEN
                BEGIN
          VLET := COPY(VPASO,VI,1) ;
                 VRAIZ := VRAIZ+VLET ;
          EXIT ;
         END;
    END;
   END;
end;

end.

Última edición por Goyo fecha: 05-07-2007 a las 22:37:39.
Responder Con Cita
  #5  
Antiguo 05-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
La homoclave y el dígito verificador los asigna (si estas en México) la secretaría de hacienda y crédito público y deberás hacer una solicitud formal a esta secretaría para que te permita desde tu programa asignar una homoclave. Lo veo un poco complicado ya que deben intervenir el SAT (Sistema de administración tributaria) y el RENAPO (Registro nacional de población).
__________________

Responder Con Cita
  #6  
Antiguo 06-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Cita:
Empezado por ContraVeneno
La homoclave y el dígito verificador los asigna (si estas en México) la secretaría de hacienda y crédito público y deberás hacer una solicitud formal a esta secretaría para que te permita desde tu programa asignar una homoclave. Lo veo un poco complicado ya que deben intervenir el SAT (Sistema de administración tributaria) y el RENAPO (Registro nacional de población).
Nop, la asignación de la homoclave y codigo verificador se obtiene mediante un algoritmo, que dicho sea de paso, no me lo se .

Existe un programa gratuito que te obtiene tu rfc con todo y homoclave pero obviemante es el puro exe, no incluye los fuentes
Responder Con Cita
  #7  
Antiguo 06-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
La homoclave y el dígito verificador que te proporcionan esos "programas gratuitos" no son oficiales.
__________________

Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
sentencia SQL jerosol SQL 2 14-06-2007 21:13:53
DateTimePicker con fecha erronea FGarcia Varios 3 04-12-2005 21:42:30
Sentencia SUM geovany SQL 2 29-10-2004 23:52:24
estructura erronea pero no se donde mainau Varios 6 16-07-2004 13:31:12
DBGrid seleccion erronea bestiux OOP 4 29-06-2004 15:59:48


La franja horaria es GMT +2. Ahora son las 03:25:56.


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