Delphi - Cotejar Funcion

 
Vista:
sin imagen de perfil

Cotejar Funcion

Publicado por Jorge (2 intervenciones) el 19/07/2017 20:11:47
Buenas a todos: Estoy utilizando Delphi 7 y SQL de base de tados. Creee esta función, pero solo me da el resuldata 1, la funcion no continua. De manera que siempre me da el valor de 1.
¿Alguna sugerencia?
Soy nuevo en esto, es la primera vez que hago una funcion.
Gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function SQLGetReEnvios (strMedResub : string) :string ;
var
strSQL : string;
begin
  strSQL := 'SELECT MedReSub' + 'FROM Hcinsuranceclaimheader';
      if strMedReSub = '' then
  begin
   result := '1';
 end
     Else
     begin
     result := '7';
 
    end;
 
    end;
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Cotejar Funcion

Publicado por E.T. (1244 intervenciones) el 19/07/2017 20:53:18
Veo que recien inicias.
SQL habla del lenguaje de la base de datos, puede ser SQLServer, MySQL, Firebird... entre muchos más, cual es en realidad
el que estas usando?

Ya estableciste conexion con tu aplicacion y la base de datos?
porque el codigo que pones en realidad no está haciendo nada, te explico un poco tu misma funcion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function SQLGetReEnvios (strMedResub : string) :string ;
var
  strSQL : string;
begin
  strSQL := 'SELECT MedReSub' + 'FROM Hcinsuranceclaimheader';
  if strMedReSub = '' then
    begin
      result := '1';
    end
  Else
    begin
      result := '7';
    end;
end;

1
2
3
4
5
6
7
8
9
10
"strMedResub" es el parámetro de entrada de la funcion
"result" como su nombre dice, es el resultado
//Imagino que llamas a tu funcion de la siguiente forma
respuesta := SQLGetReEnvios('');
//o de esta otra forma
respuesta := SQLGetReEnvios(variableString);
//El proceso que realiza la funcion es: si el parametro "strMedResub" es una cadena vacia
//regresa 1 y si es diferente a cadena vacia regresa 7, siempre, sin importar lo que mandes como
//parametro y sin importar lo que hay en la base de datos
//Pues lo que pones en la variable "strSQL" no lo usas para nada 

Lo que debería ser es lo siguiente, suponiendo que ya estableciste conexiona tu base de datos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function SQLGetReEnvios (strMedResub : string) :string ;
var
  strSQL : string;
begin
  strSQL := 'SELECT MedReSub FROM Hcinsuranceclaimheader';
  Query1.Close;
  Query1.Sql.Clear;
  Query1.Sql.Add(strSQL);
  Query1.Open;
  if not Query1.Eof then begin //Esta linea nos permite saber si el query regresó algun dato    
    //if strMedReSub = '' then// esta linea la cambiaría por esto
    if Query1.FieldByName('MedReSub').AsString = '' then
      begin
        result := '1';
      end
    Else
      begin
        result := '7';
      end;
  else
    result := '1';//No hay datos en la consulta realizada
  Query1.Close;
end;

Para que esto funcione, ya deberias tener una conexion con el componente TDataBase (debidamente configurado) de delphi,
además de tener un componente TQuery enlazado a tu TDataBase.
Estos componentes son los básicos de delphi y te permitirian conectarte a la mayoria de las bases de datos a traves de
conecciones del tipo ODBC.

Dale una leida a esto:
http://www.formauri.es/arrobamasmas/Cursos/index.php?apdo=0402&curso=4_02_02&cap=4a
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Cotejar Funcion

Publicado por Jorge (2 intervenciones) el 19/07/2017 21:39:03
Gracias por contestar tan rápido, la base de datos es MSSQL y Delphi 7.
Si ya tengo conexión con la base de datos.
Estoy leyendo lo que me enviaste, me toma un tiempo ya que estoy empezando a entender las cosas, como por ejemplo a que te refieres con Query1.close, Query1.eof, etc.
Disculpa mi ignorancia.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Cotejar Funcion

Publicado por E.T. (1244 intervenciones) el 20/07/2017 01:25:57
De acuerdo, dime como hiciste la conexion entre tu aplicacion y la base de datos?

-Query1.eof, cuando ejecutas una consulta, digamos un "select campo from tabla" debes verificar si hay datos de respuesta
ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Query1.close;//Hay que cerrar la consulta actual, si hay alguna
Query1.Sql.Clear;//se limpia la consulta anterior
Query1.Sql.Add('select campo1, campo2 from tabla');// se genera la nueva consulta
Query1.Open;//se ejecuta la consulta
if not Query1.eof then begin //el "Eof" significa "end of file", lo que quiere decir, si no hay fin de archivo entonces...
//aqui pondiras el codigo que quieres hacer con los datos obtenidos de la consulta
//mostrarlos al usuario, hacer calculos...
//aqui pudiera ser que haya datos, pero no en todos los campos, lo verificarias de esta forma
  if Query1.FieldByName('campo1').AsString <> '' then begin
    //Aqui quiere decir que el campo1 tiene datos
  end else begin
    //Aqui quiere decir que el campo1 NO tiene datos
  end;
end else begin
//Aqui pondrias algun otro codigo, puede ser un mensaje al usuario diciendo que no se encontraron datos
end;
Query1.Close;//por ultimo, se cierra la consulta, pues ya no se necesita trabajar con los datos

Que pasa si esperas recibir varios registros o filas de información? harias algo como esto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Query1.close;//Hay que cerrar la consulta actual, si hay alguna
Query1.Sql.Clear;//se limpia la consulta anterior
Query1.Sql.Add('select campo1, campo2 from tabla');// se genera la nueva consulta
Query1.Open;//se ejecuta la consulta
while not Query1.eof do begin //Aqui el while, indica "mientras no haya fin de archivo" hacer lo siguiente
//aqui pondiras el codigo que quieres hacer con los datos obtenidos de la consulta
//mostrarlos al usuario, hacer calculos...
//aqui pudiera ser que haya datos, pero no en todos los campos, lo verificarias de esta forma
  if Query1.FieldByName('campo1').AsString <> '' then begin
    //Aqui quiere decir que el campo1 tiene datos
  end else begin
    //Aqui quiere decir que el campo1 NO tiene datos
  end;
  Query1.Next;//Cuando una consulta se ejecuta, siempre inicias en el primer registro o fila que encuentre la consulta
  //Con el "Next" le dices al Query1 que te dé el siguiente registro o fila
end;
Query1.Close;//por ultimo, se cierra la consulta, pues ya no se necesita trabajar con los datos

Te recomiendo esta pagina
http://delphiallimite.blogspot.mx/
Del lado izquierdo está la lista de categorias que puedes ver, estan ordenadas de lo mas nuevo a lo mas antiguo
Aqui lo de base de datos
http://delphiallimite.blogspot.mx/search/label/bases%20de%20datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar