Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-10-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 35
Poder: 0
michal Va por buen camino
caracteres extraños en mi dbgrid

Hola a todos


Estoy creando una aplicación con C++Builder 6 y SQLite3 usando los componentes de Zeos (geniales porque son gratis y fáciles de usar)
Cuando hago consultas a las tablas de mi base de datos, me muestra caracteres raros en lugar de ñ , y/ o vocales con tildes. Me sucede
tanto en mi DBGrid como en ComboBoxs. Sin embargo usando la aplicación SQLite Studio, en las consultas sí aparecen las ñ y las vocales
con tildes y diérisis (camagüey). He leído que SQLite codifica su Charset con UTF-8. Y la propiedad FONT de los objetos que uso en
C++builde6: ZTable,ZQuery, DBGrid, y ComboBox, no traen UTF-8 en su Charset. Cómo puedo solucionar eso?


Gracias
Responder Con Cita
  #2  
Antiguo 01-10-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Has probado a cambiar la codificación de la Base de Datos?
En un visor que yo tengo por aquí (https://sqlitebrowser.org/) aparece esto:





Si realmente UTF8 está codificando como unicode, como aparece en la imagen, el problema es que creo que tu versión (los componentes) que trae no lo soportan.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 01-10-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 35
Poder: 0
michal Va por buen camino
Si el c++builder6 y los zeoslib 6.6.5 stable no lo soportan, ufff, es un problema. Porque SQLite solo codifica sus tablas con UTF-8 ó UTF-16.


Si pudieras sugerirme alguna alternativa..


Mi aplicación se conecta a una db en mysql (Xampp) y debe hacer salvas locales en una db en sqlite3, que cuando el cliente quiera, las sincronice las dos. Por eso necesito que sea
SQLite3. El C++Builder6 no es negociable, o sea no lo puedo cambiar. No hay algún truco? Tal vez accediendo directamente a los campos (TField) con OnGetText. Lo que sucede es que

por lo menos en el builder 6 no aparece el TField como un componente que se pueda usar fácilmente.


Gracias
Responder Con Cita
  #4  
Antiguo 01-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
una posible alternativa si no tienes UTF-8 en los componentes seria codificar las cadenas con caracteres de tabla ASCII que tiene acentos, Ñ etc

quizas si usas estos componentes?? La version Standard cuesta 329$





https://www.devart.com/unidac/#:~:te...20a%20powerful

Última edición por navbuoy fecha: 01-10-2024 a las 21:02:59.
Responder Con Cita
  #5  
Antiguo 01-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
le pregunte a chatGPT y me dice esto:

Cita:
Los componentes ZeosLib sí soportan UTF-8, pero puede requerir una configuración adecuada tanto en la conexión como en las consultas.

Pasos para asegurar la compatibilidad con UTF-8 en ZeosLib:
Configuración de la conexión (TZConnection): Asegúrate de que el conjunto de caracteres utilizado por la conexión sea UTF-8. Puedes hacer esto configurando la propiedad ClientCodepage en UTF8 o asegurándote de que la base de datos se conecte con este conjunto de caracteres.
Código:
ejemplo:

ZConnection1->Properties->Values["codepage"] = "UTF8";
Cita:
O en el caso de configurarlo visualmente:

Selecciona tu componente TZConnection.
En la propiedad Properties, añade un parámetro codepage=UTF8.
Configurar el servidor MySQL o PostgreSQL para UTF-8: Asegúrate de que la base de datos esté configurada para usar UTF-8, tanto a nivel de base de datos como en las tablas y columnas que almacenen texto.

TZQuery y TZTable: Los componentes de consulta como TZQuery y TZTable también deben trabajar correctamente con UTF-8 siempre que el TZConnection esté configurado correctamente para ello.
Cita:
En SQLite3, el soporte para UTF-8 es nativo, ya que la base de datos almacena cadenas de texto en formato UTF-8 de manera predeterminada. No necesitas configurar un conjunto de caracteres específico como lo harías en MySQL o PostgreSQL. Sin embargo, al usar los componentes ZeosLib para conectarte a SQLite3, hay algunas configuraciones importantes que debes tener en cuenta para asegurarte de que el manejo de UTF-8 sea correcto.

Configuración de UTF-8 en ZeosLib con SQLite3:
Configuración de la conexión (TZConnection): No es necesario establecer un código de página específico, ya que SQLite3 trabaja nativamente con UTF-8. Sin embargo, puedes verificar que la propiedad ClientCodepage esté vacía o configurada correctamente.

Asegúrate de no establecer el ClientCodepage a otro valor que no sea UTF-8, ya que podría interferir con el manejo de los caracteres.

Código:
ZConnection1->Properties->Values["ClientCodepage"] = "UTF8";
Cita:
Guardar y recuperar texto con UTF-8: SQLite3, al ser nativamente UTF-8, debe manejar cualquier carácter que se almacene en el formato correcto. Si estás utilizando componentes como TZQuery, puedes hacer consultas que contengan texto en diferentes idiomas o caracteres especiales sin problema:
Código:
ZQuery1->SQL->Text = "INSERT INTO users (name) VALUES ('José Pérez')";
ZQuery1->ExecSQL();
Cita:
Consideraciones adicionales:
Insertar y leer datos: Si tienes problemas con caracteres especiales, asegúrate de que las cadenas de texto en tu aplicación C++ Builder se manejen correctamente en UTF-8. El IDE y las bibliotecas de manejo de cadenas deben manejar correctamente los caracteres Unicode para que las cadenas se guarden en la base de datos como UTF-8.

Compresión o limitaciones de memoria: SQLite3 no tiene problemas con almacenar cadenas largas en UTF-8. Sin embargo, asegúrate de que las consultas y las operaciones en ZeosLib no estén limitadas por alguna configuración de memoria que pueda truncar los datos.

Sin necesidad de configuración adicional: A diferencia de MySQL o PostgreSQL, no necesitas hacer ninguna conversión explícita o configuración especial en SQLite3 para soportar UTF-8. Toda la base de datos está diseñada para trabajar con este formato.

Última edición por navbuoy fecha: 01-10-2024 a las 21:12:55.
Responder Con Cita
  #6  
Antiguo 01-10-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 35
Poder: 0
michal Va por buen camino
Solucionado

Gracias Neftalí.


En ocasiones, la vía más fácil es preguntar a quienes tienen más experiencia en determinado tema. Por eso acudo a este foro del cual soy miembro desde hace algún tiempo.


Es muy cierto que los componentes que uso no soportan UTF8.



Me puse a rebuscar en la ayuda del c++builder6 y existen varias funciones de conversión dentro de la categoría character set conversions y encontré una: UTF8Decode, la cual hace
el trabajito de conventir de UTF8 a AnsiString pero me apareció otro problema, y es que al convertir a AnsiString el resultado lo guardo en un ComboBox, que antes, en su evento OnChange usaba el texto seleccionado para otra consulta, y ahora no funciona, porque la consulta no devuelve resultados para un Texto AnsiString en una tabla codificada con UTF8.
Por suerte también existe UTF8Encode. Entonces aunque parezca una tarea medieval: decodifico el resultado de una consulta para llenar mi 1er ComboBox, y luego el texto seleccionado
lo codifico para usarlo en otra consulta, que me devolverá un resultado que deberé decodificar nuevamente para llenar el 2do ComboBox.



El 1er ComboBox se llena con los nombres de las provincias de mi país (algunas tienen tildes y diérisis) y al seleccionar una provincia, en el 2do ComboBox aparecen los municipios de esa provincia como resultado de una consulta. (Usando tablas relacionadas obviamente). Actualmente estoy investigando como Decodificar el contenido de mi DBGrid, con su DataSet buscando alguna propiedad que sea String para poder usar UTF8Decode.


Una vez más Gracias.
Responder Con Cita
  #7  
Antiguo 01-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
a ver si te sirve este codigo para convertir el AnsiString

Código:
#include <windows.h>

AnsiString AnsiToUTF8(const AnsiString &ansiStr)
{
    // Paso 1: Convertir AnsiString a WideString (UTF-16)
    WideString wideStr = WideString(ansiStr);

    // Paso 2: Calcular el tamaño necesario para la cadena UTF-8
    int utf8Len = WideCharToMultiByte(CP_UTF8, 0, wideStr.c_bstr(), -1, NULL, 0, NULL, NULL);

    // Paso 3: Asignar un buffer para almacenar la cadena UTF-8
    char *utf8Str = new char[utf8Len];

    // Paso 4: Convertir la WideString (UTF-16) a UTF-8
    WideCharToMultiByte(CP_UTF8, 0, wideStr.c_bstr(), -1, utf8Str, utf8Len, NULL, NULL);

    // Convertir el buffer de UTF-8 a AnsiString y liberar el buffer
    AnsiString result = utf8Str;
    delete[] utf8Str;

    return result;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString original = "Hola, mundo! ñáéíóú";
    AnsiString utf8Str = AnsiToUTF8(original);
    ShowMessage(utf8Str);  // Muestra la cadena convertida a UTF-8
}
Responder Con Cita
  #8  
Antiguo 01-10-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 35
Poder: 0
michal Va por buen camino
Gracias, pero debe ser lo contrario, convertir de UTF8 a AnsiString porque mis componentes no soportan UTF8 en su Charset de su tipo de letra.
Encontré una solución pírrica con UTF8Decode y UTF8Encode para los ComboBox, pero todavía no lo he logrado con el DBGrid.


Cómo puedo insertar una imágen aquí? tengo una en una carpeta de mi pc pero al poner la ruta, me sale un icono de una imagen rota, como que no la encuentra.
Responder Con Cita
  #9  
Antiguo 01-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
sube la imagen aqui.... https://es.imgbb.com/

luego abres la pagina ahi donde sale la imagen en esa misma web y copias con el boton derecho el link (sobre la imagen) y lo pegas aqui dandole al icono de IMG de los iconos de arriba

para hacer lo contrario (Convertir de UTF-8 a AnsiString) aqui tienes codigo que lo hace:

Código:
#include <windows.h>

AnsiString UTF8ToAnsi(const AnsiString &utf8Str)
{
    // Paso 1: Calcular el tamaño necesario para la cadena WideChar (UTF-16)
    int wideLen = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, NULL, 0);

    // Paso 2: Asignar un buffer para almacenar la cadena WideChar (UTF-16)
    wchar_t *wideStr = new wchar_t[wideLen];

    // Paso 3: Convertir de UTF-8 a WideChar (UTF-16)
    MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, wideStr, wideLen);

    // Paso 4: Convertir la cadena WideChar (UTF-16) a AnsiString
    AnsiString result = WideString(wideStr);

    // Liberar el buffer temporal
    delete[] wideStr;

    return result;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString utf8Text = "Hola, mundo! ñáéíóú en UTF-8";
    AnsiString ansiText = UTF8ToAnsi(utf8Text);
    ShowMessage(ansiText);  // Muestra la cadena convertida a AnsiString
}

El evento OnGetText de un TField es una excelente manera de convertir datos antes de que se muestren en el control visual. Aquí es donde puedes interceptar el texto en UTF-8, convertirlo a AnsiString, y luego mostrarlo en el DBGrid.

Código:
void __fastcall TForm1::Query1NombreGetText(TField *Sender, AnsiString &Text, bool DisplayText)
{
    // Obtener el valor original del campo como cadena UTF-8
    AnsiString utf8Str = Sender->AsString;

    // Convertir de UTF-8 a AnsiString
    Text = UTF8ToAnsi(utf8Str);
}

Última edición por navbuoy fecha: 01-10-2024 a las 23:50:38.
Responder Con Cita
  #10  
Antiguo 02-10-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 35
Poder: 0
michal Va por buen camino
Y cómo puedo acceder al TField de una consulta, o de mi DBGrid. Y al evento OnGetText?? No aparece en los eventos de mi zquery1, ni en mi DBGrid1. Eso está bastante abstracto.
Responder Con Cita
  #11  
Antiguo 02-10-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Las zeos sí están actualizadas para usar utf8


Última edición por Casimiro Notevi fecha: 02-10-2024 a las 14:52:36.
Responder Con Cita
  #12  
Antiguo 02-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
En C++ Builder 6, para acceder a los campos de una fila específica en un DBGrid, puedes hacerlo a través del conjunto de datos (dataset) que está vinculado al DBGrid. El DBGrid está conectado a un TDataSource, el cual a su vez está vinculado a un TQuery, TTable, o cualquier otro componente de acceso a bases de datos. Los campos de los registros se gestionan mediante objetos TField.

Para acceder al valor de un campo desde el DBGrid, puedes seguir estos pasos:

1. Acceso directo a través de TQuery o TTable
Si sabes qué campo específico deseas acceder, puedes utilizar el método FieldByName() o Fields[] del componente TQuery o TTable.

Código:
AnsiString valorCampo = Query1->FieldByName("nombre_campo")->AsString;

2. Acceso desde el componente DBGrid
El componente DBGrid no tiene acceso directo a los datos; sin embargo, puedes obtener los campos a través del conjunto de datos (DataSet) que está vinculado al TDataSource del DBGrid.

Ejemplo Accediendo al Campo de la Fila Actual:

Código:
void __fastcall TForm1::AccederCampoDesdeDBGrid()
{
    // Obtener el conjunto de datos asociado al DBGrid
    TDataSet *dataset = DBGrid1->DataSource->DataSet;

    if (dataset->Active && !dataset->Eof)
    {
        // Obtener el valor del campo desde el dataset de la fila actual
        AnsiString valorCampo = dataset->FieldByName("nombre_campo")->AsString;
        ShowMessage("Valor del campo: " + valorCampo);
    }
}

3. Acceso mediante SelectedField y SelectedRows
Si deseas acceder al campo seleccionado en el DBGrid, puedes utilizar la propiedad SelectedField. Esto devuelve el campo de la columna actualmente seleccionada.

Ejemplo usando SelectedField:

Código:
void __fastcall TForm1::AccederCampoSeleccionado()
{
    TField *campoSeleccionado = DBGrid1->SelectedField;
    
    if (campoSeleccionado != NULL)
    {
        ShowMessage("Campo seleccionado: " + campoSeleccionado->FieldName + 
                    "\nValor: " + campoSeleccionado->AsString);
    }
    else
    {
        ShowMessage("No hay ningún campo seleccionado.");
    }
}
4. Acceso a un campo en una fila seleccionada usando SelectedRows
Si el DBGrid está en modo multiselección y deseas obtener datos de las filas seleccionadas, puedes iterar sobre las filas seleccionadas usando la propiedad SelectedRows.

Ejemplo accediendo a campos de varias filas seleccionadas:

Código:
void __fastcall TForm1::AccederCamposFilasSeleccionadas()
{
    TDataSet *dataset = DBGrid1->DataSource->DataSet;

    for (int i = 0; i < DBGrid1->SelectedRows->Count; i++)
    {
        // Ir a la fila seleccionada
        dataset->GotoBookmark(DBGrid1->SelectedRows->Items[i]);

        // Obtener el valor del campo en esa fila seleccionada
        AnsiString valorCampo = dataset->FieldByName("nombre_campo")->AsString;
        ShowMessage("Valor del campo en fila seleccionada: " + valorCampo);
    }
}

Resumen:
FieldByName(): Es la forma más común y directa de acceder a un campo por su nombre.
DBGrid1->SelectedField: Para acceder al campo seleccionado en la columna actual.
SelectedRows: Para acceder a campos de varias filas seleccionadas cuando el DBGrid está en modo multiselección.
Con estos métodos, puedes acceder a los campos de un registro en un DBGrid y manejar los datos según sea necesario.
Responder Con Cita
  #13  
Antiguo 02-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
El Evento OnGetText en C++ Builder 6

En C++ Builder 6, el evento OnGetText sí existe para los objetos TField, pero no está disponible directamente en componentes como TQuery o TTable. Sin embargo, puedes usarlo a nivel de los campos individuales que forman parte del conjunto de datos.

El evento OnGetText se utiliza cuando necesitas personalizar la representación de un campo en un componente visual (por ejemplo, mostrar un formato especial o una conversión). Este evento es útil cuando necesitas modificar cómo se muestran los valores de un campo en controles como un DBGrid, sin modificar el valor subyacente en la base de datos.

Cómo utilizar el evento OnGetText en C++ Builder 6
Pasos para usar OnGetText:
Agrega los campos a tu conjunto de datos (ya sea un TQuery, TTable, o cualquier componente de acceso a datos). Esto puede hacerse de manera visual en tiempo de diseño o en código.

Asigna el evento OnGetText a los campos específicos.

Ejemplo paso a paso:
Crear los campos del conjunto de datos:

En el IDE de C++ Builder 6, selecciona tu componente TQuery o TTable.
Haz clic derecho en el componente y selecciona "Fields Editor".
En la ventana de Fields Editor, haz clic derecho y selecciona "Add all fields" para crear los campos asociados a las columnas de tu consulta.
Asignar el evento OnGetText:

Selecciona el campo en el Fields Editor.
En el inspector de objetos, localiza el evento OnGetText y haz doble clic para generar el manejador del evento.
Escribir el código en el manejador del evento OnGetText: En este manejador, puedes personalizar cómo se muestra el valor de este campo en los controles visuales.

Ejemplo de Código:
Imagina que tienes un campo numérico, pero quieres mostrarlo siempre con dos decimales en el DBGrid sin alterar su valor en la base de datos.

Código:
void __fastcall TForm1::Query1NUMEROGetText(TField *Sender, AnsiString &Text, bool DisplayText)
{
    if (!Sender->IsNull)
    {
        // Formatear el número con dos decimales
        Text = FormatFloat("0.00", Sender->AsFloat);
    }
    else
    {
        // Si el campo es NULL, mostramos un texto vacío
        Text = "";
    }
En este ejemplo, el evento OnGetText del campo NUMERO se encarga de formatear el valor del campo para que siempre se muestre con dos decimales, independientemente de cómo esté almacenado en la base de datos.

El nombre de la función generada para el evento OnGetText no necesariamente tiene que seguir el nombre del campo o consulta. De hecho, puedes usar cualquier nombre válido para el manejador del evento, como OnGetText, o puedes seguir la convención de nombrarlo más específicamente para saber a qué campo corresponde (por ejemplo, Query1NUMEROGetText).

El nombre TForm1::Query1NUMEROGetText en mi primer ejemplo fue solo una convención que hace referencia al campo NUMERO de la consulta Query1. Sin embargo, puedes cambiarlo por un nombre más general como TForm1::OnGetText, o cualquier otro nombre descriptivo.

Ejemplo corregido:
Si prefieres usar OnGetText como nombre del manejador, aquí tienes el código:

Código:
void __fastcall TForm1::OnGetText(TField *Sender, AnsiString &Text, bool DisplayText)
{
    if (!Sender->IsNull)
    {
        // Formatear el número con dos decimales
        Text = FormatFloat("0.00", Sender->AsFloat);
    }
    else
    {
        // Si el campo es NULL, mostramos un texto vacío
        Text = "";
    }
}
Luego, asignas este manejador al evento OnGetText del campo correspondiente:

En tiempo de diseño (usando el Fields Editor):

Haz doble clic en el evento OnGetText del campo deseado en el Inspector de Objetos, y selecciona OnGetText (o el nombre que hayas definido).
En tiempo de ejecución (si decides asignarlo manualmente):


Código:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TFloatField *field = dynamic_cast<TFloatField*>(Query1->FieldByName("NUMERO"));
    
    if (field != NULL)
    {
        field->OnGetText = OnGetText;  // Asignando el manejador del evento
    }
}

Resumen:
El evento OnGetText está disponible a nivel de los campos individuales de un conjunto de datos.
Puedes usarlo para personalizar la manera en que se muestra el valor de un campo en un control visual sin alterar el valor real en la base de datos.
Necesitas definir los campos en el Fields Editor o en tiempo de ejecución para acceder a este evento.

Última edición por navbuoy fecha: 02-10-2024 a las 16:42:53.
Responder Con Cita
  #14  
Antiguo 03-10-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 35
Poder: 0
michal Va por buen camino
Problema solucionado!!!

Muchas gracias a todos por sus aportes

Un fuerte abrazo desde Cuba
Responder Con Cita
  #15  
Antiguo 03-10-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por michal Ver Mensaje
Problema solucionado!!!
Muchas gracias a todos por sus aportes
Un fuerte abrazo desde Cuba
Pues estaría bien saber lo que has hecho

Nuestra guía de estilo alternativa (jocosa)
Cita:
GUÍA ALTERNATIVA
  1. No te preocupes por dónde colocar tus preguntas. A nosotros nos encanta abrir todos los mensajes sin importar en qué foro estén.
  2. Ni pienses qué título ponerle a tu mensaje. "Tengo una duda" es suficiente para que nosostros entendamos que estás en problemas.
  3. Cuando te aparezca un mensaje de error, no te molestes en decirnos cuál es. Nos encanta tratar de adivinar.
  4. Cuando publiques código no te preocupes porque quede bien presentado. Nosotros distinguimos perfectamente los bloques sin necesidad de ninguna indentación.
  5. Si tienes un problema con bases de datos no es necesario que nos digas qué motor usas, nosotros sabemos la respuesta para cualquiera de ellos.
  6. Si no se entiende lo que preguntas, ni te molestes en aclarar. Nos fascinan los misterios.
  7. No te esfuerces en oprimir F1. Nosotros ya lo hemos hecho y podemos darte la respuesta más rápido.
  8. La opción de búsqueda en los foros sólo está para adornar la página. Es divertidísimo contestar una y otra vez lo mismo.
  9. ¿Google? Eso es para nerds como nosotros.
  10. Ante un problema, no te molestes en tratar de entenderlo. Nosotros ya nos hemos quemado las pestañas por ti y estamos felices de escribirte el código.
  11. Si te plase, eskribe con kas y faltas de hortografia. Komo nosotros no entramos a los chats nos hencanta pensar ke estamos en 1.
  12. Si en cinco minutos nadie te ha contestado, siéntete en libertad de abrir cuantos hilos puedas para preguntar lo mismo. Tú no mereces ese trato.
  13. Nunca des las gracias. Nos encanta responder sin más aliciente que ver nuestro nombre escrito.
  14. Cuando escribas un mensaje, siéntete en libertad de no volver en tres semanas. Nosotros estaremos aquí resolviendo tu problema.
  15. Si eres nuevo, acláralo desde el principio. Con eso basta para que nosotros resolvamos tu problema. Tú aún no puedes consultar la ayuda.
  16. Si alguien te remite a la guía de estilo, no te molestes en leerla. Tú tienes cosas más importantes que hacer y a fin de cuentas, nadie la lee.
  17. Si encuentras la solución tú mismo, no te molestes en explicarla. Bastará con un "Ya lo resolví, gracias". Nos emociona ver gente autosuficiente.
  18. No dudes en pedir que te envíen la solución a tu correo. El foro está sólo para los ociosos y tú no tienes tiempo que perder.
Responder Con Cita
  #16  
Antiguo 05-10-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 35
Poder: 0
michal Va por buen camino
Hola otra vez.

Disculpen pero tuve problemas de conexión estos dias.
Pronto subiré lo que he hecho.

Quisiera saber si es posible acceder al evento OnGetText de un campo de una tabla o consulta de manera dinámica, es que mi base de datos SQlite3 debe cambiar cada año.

Ya había dicho que logré decodificar los textos UTF8 accediendo al evento OnGetText de esta manera
Código Delphi [-]
Text= UTF8Decode(Sender->AsString); y funcionó ok,  para todos mis data-awares(DBGrids, etc..)

Saludos

Última edición por Neftali [Germán.Estévez] fecha: 07-10-2024 a las 09:08:54. Razón: Añadir etiquetas al código
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
Caracteres extraños en un Memo Sr.Scorpion Varios 1 23-10-2008 19:54:59
Caracteres extraños en un Memo Sr.Scorpion Varios 6 23-10-2008 14:47:05
Caracteres extraños (#$D#$A) Iuconlas Varios 2 23-09-2005 17:09:05
caracteres extraños en reportes Tangela Conexión con bases de datos 0 21-01-2004 19:56:22
Caracteres extraños Germi Conexión con bases de datos 1 14-10-2003 15:26:18


La franja horaria es GMT +2. Ahora son las 06:08:50.


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