Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [dcc32 Error]..... E2010 Incompatible types: 'string' and 'Integer' (https://www.clubdelphi.com/foros/showthread.php?t=92135)

jolunavi 06-08-2017 03:28:15

[dcc32 Error]..... E2010 Incompatible types: 'string' and 'Integer'
 
Hola a todos, disculpen las molestias.
Soy nuevo en delphi
Estoy tratando de crear un login pero tengo un problema y me encantaria que me den una mano para resolver esto

estoy reciviendo el siguiente error:

Código:

[dcc32 Error] inicio.pas(240): E2010 Incompatible types: 'string' and 'Integer'
[dcc32 Error] inicio.pas(241): E2010 Incompatible types: 'string' and 'Integer'

agrego el archivo "inicio.pas" que es en el qe recibo el error

espero que me puedan ayudar. Agradezco de antemano las respuestas que me puedan dar.!

Código Delphi [-]
unit inicio;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage, Vcl.Imaging.jpeg, Vcl.ExtCtrls, Registry;

type
  TForm1 = class(TForm)
    ///  pulsanti
    BtnSalir: TButton;
    BtnLogin: TButton;
    BtnConfig: TButton;
    ///  Edits o Campi per scrivere
    EditUser: TEdit;
    EditPass: TEdit;
    ///  Labels o etichette
    Label2: TLabel;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    ///  Shapes o Quadri
    Shape1: TShape;
    Shape2: TShape;
    ///  Imagenes
    Image1: TImage;


    ///  Registry
    procedure ReadRegistry;
    procedure WriteRegistry;

    ///  Check Login MySQL
    procedure LoginCheckSQL;

    ///  FormKeyPress
    procedure FormKeyPress(Sender: TObject; var Key: Char);

    ///  FormShow
    procedure FormShow(Sender: TObject);

    ///  BtnLogin
    procedure BtnLoginClick(Sender: TObject);

    ///  BtnUscire
    procedure BtnSalirClick(Sender: TObject);

    ///  BtnConfig
    procedure BtnConfigClick(Sender: TObject);

    ///  EditUser
    procedure EditUserKeyPress(Sender: TObject; var Key: Char);
    procedure EditUserChange(Sender: TObject);
    procedure EditUserEnter (SEnder: Tobject);
    procedure EditUserExit(Sender: TObject);

    ///  EditPass
    procedure EditPassKeyPress(Sender: TObject; var Key: Char);
    procedure EditPassChange(Sender: TObject);
    procedure EditPassEnter (SEnder: Tobject);
    procedure EditPassExit(Sender: TObject);


  private
    { Private declarations }
    Reg: TRegistry;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  var Key: Char;

implementation

{$R *.dfm}

uses Config, Modulos, menu;


//////////////////////////////////////////////////////////////
/// - TForm1 -      REGISTRO DEI DATI DEL DATABASE
procedure TForm1.ReadRegistry;
  var alamat: String;

  begin
    alamat:='\Software\DatosLogin';
    try
        try
            Reg.OpenKey(alamat, false);
            DataModule1.StringaHostName:=Reg.ReadString('Hostname');
            DataModule1.StringaDBName:=Reg.ReadString('Database');
            DataModule1.StringaDBUser:=Reg.ReadString('UseName');
            DataModule1.StringaDBPass:=Reg.ReadString('Password');
            DataModule1.StringaDBPort:=Reg.ReadString('Port');

            if DataModule1.StringaHostName ='' then
                begin
                    WriteRegistry;
                    exit;
                end

            else if DataModule1.StringaDBName ='' then
                 begin
                    WriteRegistry;
                    exit;
                 end

              else if DataModule1.StringaDBUser ='' then
                 begin
                    WriteRegistry;
                    exit;
                 end

             else if DataModule1.StringaDBPass ='' then
                 begin
                    WriteRegistry;
                    exit;
                 end

            else if DataModule1.StringaDBPort ='' then
                 begin
                    WriteRegistry;
                    exit;
                 end

        except on ERegistryException do
            //
        end;

    finally
        Reg.CloseKey;
    end;
  end;

////////////////////////////////////////////////////////////////
/// - TForm1 -      REGISTRO DEI DATI DEL DATABASE
procedure TForm1.WriteRegistry;
  var alamat:String;
  begin
    alamat:='\Software\DatosLogin';
    try
        Reg.OpenKey(alamat,True);
        ///PUEDES REEMPLAZAR POR NUMERO IP.
        Reg.WriteString('HostName','localhost');
        ///DATABASE DE MYSQL A USAR.
        Reg.WriteString('Database','dati');
        ///USUARIO DATABASE MYSQL.
        Reg.WriteString('UserName','root');
        //PASSWORD USUARIO DATABASE MYSQL.
        Reg.WriteString('Password','688200');
        ///PUERTO DE MYSQL.
        Reg.WriteString('Port','3306');

        DataModule1.StringaHostName:='localhost';
        DataModule1.StringaDBName:='dati';
        DataModule1.StringaDBUser:='root';
        DataModule1.StringaDBPass:='688200';
        DataModule1.StringaDBPort:='3306';

    finally
        Reg.CloseKey;
    end;
  end;



//////////////////////////////////////////////////////////////
/// - BtnSalir -      BOTON USCIRE [ Salir ]
procedure TForm1.BtnSalirClick(Sender: TObject);
  begin
    application.Terminate;
  end;

//////////////////////////////////////////////////////////////
/// - BtnConfig -      BOTON CONFIGURAZIONE [ Configuracion ]
procedure TForm1.BtnConfigClick(Sender: TObject);
  begin
    form1.Hide;
    Form2.ShowModal;
  end;

//////////////////////////////////////////////////////////////
/// - BtnLogin -      BOTON LOGIN [ Entrar ]
procedure TForm1.BtnLoginClick(Sender: TObject);
  begin
    ////////////////////////
    /// VALIDAZIONE DI LOGIN
    if EditUser.Text = '' then
         begin
            Application.MessageBox('Primero escriba su nombre de usuario','Informacion',MB_OK or MB_IconInformation);
            EditUser.SetFocus;
            exit;
         end
    else if EditPass.Text = '' then
         begin
            Application.MessageBox('Primero escriba su contraseña','Informacion',MB_OK or MB_IconInformation);
            EditPass.SetFocus;
            exit;
         end;

    try
        LoginCheckSQL;
    except
        Application.MessageBox('Fallo la coneccion!. Por favor contacte al Administrador de su base de datos','Informacion',MB_OK or MB_IconWarning);
    end;
  end;

//////////////////////////////////////////////////////////////
///  LoginCheckSQL
procedure TForm1.LoginCheckSQL;
  begin
      if DataModule1.OpenConnection = True then

      ///////////////////////////////////////
      ///  CREIAMO LA QUERY
      DataModule1.FDQueryUsers.SQL.Clear;
      DataModule1.FDQueryUsers.SQL.Add('SELECT * FROM users WHERE username = ' + QuotedStr(EditUser.Text));

       try
          DataModule1.FDQueryUsers.Open;
          DataModule1.FDQueryUsers.Active:= False;
          DataModule1.FDQueryUsers.Active:= True;

          if not DataModule1.FDQueryUsers.Eof then
              begin
                  if StrToInt(DataModule1.FDQueryUsers.FieldByName('status').AsString) = 0 then
                       begin
                          MessageDlg('Lo siento usuario' + EditUser.Text + '. Usted ya no esta activo!' + sLineBreak + 'Por favor contactar a su Administrador',MtInformation,[MbOK], 0);
                       end
                  else if DataModule1.FDQueryUsers.FieldByName('password').AsString <> EditPass.Text then
                       begin
                          MessageDlg('Contraseña incorrecta!' + sLineBreak + '...Trate de nuevo',MtInformation,[MbOK], 0);
                       end
                  else
                       begin
                          DataModule1.intUID:=StrToInt(DataModule1.FDQueryUsers.FieldByName('id').AsString);
                          DataModule1.StringaUsername:=StrToInt(DataModule1.FDQueryUsers.FieldByName('username').AsString);//////////ERROR HERE
                          DataModule1.StringaFullName:=StrToInt(DataModule1.FDQueryUsers.FieldByName('fullname').AsString);   //////////ERROR HERE

                          Form3.Show;
                          Form1.Hide;
                       end

              end
          else
              begin
                  MessageDlg('Lo siento usuario' + EditUser.Text + '. No podemos encontrarlo!' + sLineBreak + 'Por favor contactar a su Administrador',MtInformation,[MbOK], 0);
              end
          except
              on e: Exception do
              begin
                  MessageDlg('ERROR mientras se estaba haciendo la consulta!'+ sLineBreak +'. ' ,MtError,[MbOK], 0);
                  exit;
              end;

        end;
  end;

//////////////////////////////////////////////////////////////
/// - EditPass -     CAMPO PER SCRIVERE LA PASSWORD
procedure TForm1.EditPassChange(Sender: TObject);
  begin
      EditUser.Color:=$00FFEBDF;
  end;
procedure TForm1.EditPassEnter(SEnder: Tobject);
  begin
      EditUser.color:=$F6CECE;
  end;
procedure TForm1.EditPassExit(Sender: TObject);
  begin
      EditUser.Color:=$FFFFFF;
  end;
procedure TForm1.EditPassKeyPress(Sender: TObject; var Key: Char);
  begin
     if Key=#13 then
     begin
     if EditPass.Text <> '' then
          begin
              BtnLogin.SetFocus;
          end
     else
          begin
             Application.MessageBox('Antes escriba su password!','Informacion',MB_OK or MB_IconInformation);
             EditPass.SetFocus;
          end;
     end;

  end;

//////////////////////////////////////////////////////////////
/// - EditUser -      CAMPO X SCRIVERE NOME UTENTE
procedure TForm1.EditUserChange(Sender: TObject);
  begin
     EditUser.Color:=$00FFEBDF;
  end;
procedure TForm1.EditUserEnter(SEnder: Tobject);
  begin
      EditUser.color:=$F6CECE;
  end;
procedure TForm1.EditUserExit(Sender: TObject);
  begin
    EditUser.Color:=$FFFFFF;
  end;
procedure TForm1.EditUserKeyPress(Sender: TObject; var Key: Char);
  begin
      if Key=#13 then
      begin
      if EditUser.Text <> '' then
          begin
              EditUser.SetFocus;
          end
      else
          begin
              Application.MessageBox('Antes escriba su Nombre de Usuario!','Informacion',MB_OK or MB_IconInformation);
              EditUser.SetFocus;
          end;
      end;
  end;

//////////////////////////////////////////////////////////////
/// - Form1 -      CHIUDERE LA APPLICAZIONE AL PREMERE  [ Esc ]
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
  begin
    if Key=#27 then Application.Terminate;
  end;

//////////////////////////////////////////////////////////////
/// DOBBREBE SCRIVERE NEL REGISTRO!   ...CONTROLLARE

procedure TForm1.FormShow(Sender: TObject);
  begin
     Reg:=TRegistry.Create;
     Reg.RootKey:=HKEY_CURRENT_USER;
     ReadRegistry;
     DataModule1.KonectarMySQL;
  end;
end.


agrego tambien el codigo del archivo de coneccion:

Código Delphi [-]
unit Modulos;

interface

uses
  System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait,
  FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB,
  FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.MySQL,
  FireDAC.Phys.MySQLDef, FireDAC.Comp.UI;

type
  TDataModule1 = class(TDataModule)
    FDCon_DB: TFDConnection;
    FDQueryUsers: TFDQuery;
    FDQueryInventarios: TFDQuery;
    FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    procedure KonectarMySQL;
    Function OpenConnection:Boolean;
    procedure CloseConnection;

  private
    { Private declarations }
  public
    { Public declarations }

    StringaHostName,StringaDBName,StringaDBUser,StringaDBPass,StringaDBPort:String;
    intUID:integer;
    StringaUsername:String;
    StringaFullName:String;
  end;

var
  DataModule1: TDataModule1;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

procedure TDataModule1.KonectarMySQL;
begin
    FDCon_DB:=TFDConnection.Create(Self);

    try
        FDCon_DB.DriverName:= 'MySQL';
        FDCon_DB.Params.Add('Server='   + StringaHostName );
        FDCon_DB.Params.Add('Database=' + StringaDBName );
        FDCon_DB.Params.Add('UserName=' + StringaDBUser );
        FDCon_DB.Params.Add('Password=' + StringaDBPass );
        FDCon_DB.Params.Add('Port='     + StringaDBPort );

        FDCon_DB.LoginPrompt:= False;
        FDCon_DB.Connected:= True;

        FDQueryUsers:=TFDQuery.Create(Self);
        FDQueryUsers.Connection:=FDCon_DB;

    except
        //
    end;
end;

Function TDataModule1.OpenConnection:Boolean;
var ConnString:String;
begin
    try
        if FDCon_DB.Connected = True then
            begin
                result :=True;
            end
        else
            begin
                KonectarMySQL;
            end;
    except
        result :=False;
    end;
end;

procedure TDataModule1.CloseConnection;
begin
    FDQueryUsers.Close;
    FDCon_DB.Close;
end;
end.

si tienen algun consejo ....bienvenido sea.
tengo casi 17 dias aprendiendo delphi [leyendo tutorials, libros y demas]
.....Muchas gracias de nuevo

jolunavi 06-08-2017 04:07:44

Disculpen olvide agregar que estoy usando la version 10.2 de embarcadero

Saludos

AgustinOrtu 06-08-2017 06:03:57

Hola jolunavi

Bienvenido a ClubDelphi

Tu problema es facil de solucionar, estas convirtiendo de string a Integer y luego queriendo almacenar dicha conversion en variables de tipo string

Reemplaza esto:

Código Delphi [-]
DataModule1.StringaUsername := StrToInt(DataModule1.FDQueryUsers.FieldByName('username').AsString);//////////ERROR HERE
DataModule1.StringaFullName := StrToInt(DataModule1.FDQueryUsers.FieldByName('fullname').AsString); //////////ERROR HERE

Por esto:

Código Delphi [-]
DataModule1.StringaUsername := DataModule1.FDQueryUsers.FieldByName('username').AsString;
DataModule1.StringaFullName := DataModule1.FDQueryUsers.FieldByName('fullname').AsString;

Fijate que el propio compilador te indica cual es el error y te señala linea que debes revisar ;)

Saludos

jolunavi 06-08-2017 07:12:56

correcto ??
 
Eres increible Agustin ! ;)

....pero ahora me salen estos mensajes:
Código:

[dcc32 Hint] inicio.pas(231): H2443 Inline function 'MessageDlg' has not been expanded because unit 'System.UITypes' is not specified in USES list
[dcc32 Hint] inicio.pas(235): H2443 Inline function 'MessageDlg' has not been expanded because unit 'System.UITypes' is not specified in USES list
[dcc32 Hint] inicio.pas(250): H2443 Inline function 'MessageDlg' has not been expanded because unit 'System.UITypes' is not specified in USES list
[dcc32 Hint] inicio.pas(255): H2443 Inline function 'MessageDlg' has not been expanded because unit 'System.UITypes' is not specified in USES list

voy a tratar de auto responderme: (dime por favor si me eqivoco)
debo agregar: 'System.UITypes' en la parte superior del archivo ...osea en Uses

ejemplo:
Código Delphi [-]
unit inicio;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage, Vcl.Imaging.jpeg,
   Vcl.ExtCtrls, Registry, System.UITypes;

type
  TForm1 = class(TForm)
.............
................
...................


que dices? ...es correcto?
mañana te tengo alguna novedad

Pueden dejar este hilo abierto ??
...para poder seguir agregando dificultades que se me presenten! :)
o deberia crear nuevos hilos??

Muchas Gracias por su ayuda!

AgustinOrtu 06-08-2017 19:04:46

Lo mas correcto es que cada duda este en un nuevo hilo, esto para facilitar las busquedas

Con respecto a tu segunda consulta, en este caso se trata de una sugerencia o hint del compilador, es decir que tu codigo es correcto pero hay algunos matices que quiza quieras revisar.
En particular se trata de que no pudo compilar la funcion MessageDlg en linea, o como se conocen en ingles inline. En pocas palabras es una optimizacion que realiza el compilador cuando traduce a codigo maquina. Podes encontrar mas informacion al respecto aca.

En efecto el compilador te esta diciendo que no pudo aplicar dicha optimizacion porque para hacerlo requiere que la unidad System.UITypes este incluida en la clausula uses. Asi que tu solucion es correcta, agregas la unidad al uses y listo

jolunavi 06-08-2017 19:46:26

esta bien.
creare un nuevo hilo para cada consulta o duda!
Muchas Gracias AgustinOrtu


La franja horaria es GMT +2. Ahora son las 04:19:06.

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