AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

No consigo mostrar los datos que me devuelve una SQL en una tabla.

Lo primero que hago es lanzar la consulta SQL:

- (void)loadView 
{
    self.client = [SqlClient clientWithServer:@"xxx" Instance:@"xxx" Database:@"xxx" Username:@"xxx" Password:@"xxx"];
    [self.client executeQuery:@"SELECT idgama, gama, rutaiconogama, count(idgama) numCursos FROM vGamasconCursosActivos GROUP BY idgama, gama, rutaiconogama" withDelegate:self];

    [super loadView];
}

Cuando se ejecuta la consulta se lanza:

- (void) sqlQueryDidFinishExecuting: (SqlClientQuery *) query
{
    if (query.succeeded)
    {
        NSMutableArray *arrayGamas = [[[NSMutableArray alloc] init] autorelease];
        for (SqlResultSet *resultSet in query.resultSets)
        {
            while ([resultSet moveNext])
            {
                for (int i = 0; i < resultSet.fieldCount; i++)
                {
                    if (i == 1)
                    { 
                        [arrayGamas addObject:[resultSet getData:i]];
                    } //Gamas                   
                }
            }
        }

        int h;
        int cantidad;

        for (h = 0, cantidad = [arrayGamas count]; h < cantidad; h = h + 1)
        {
            NSString *elemento = [arrayGamas objectAtIndex:h];
            NSLog(@"Gama: %@ ", elemento);  
        }

        self.dCategorias = arrayGamas;
        [arrayGamas release];
    }   
}

Esto muestra los datos de la consulta pero no los muestra en la tabla, ya que este ha sido creada antes de pasar por la funcion anterior.

Mis llamadas sobre la UITAble son las siguientes:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dCategorias count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    static NSString *ID_TablaSimple = @"ID_TablaSimple";
    UITableViewCell *celda = [tableView dequeueReusableCellWithIdentifier:ID_TablaSimple];

    if (celda == nil)
    {
        celda = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID_TablaSimple] autorelease];
    }

    NSUInteger fila = [indexPath row];
    celda.textLabel.text = [dCategorias objectAtIndex:fila];

    return celda;
}

Tengo que decir que el componente UITableView lo he generado en diseño y lo he relacionado desde Interface Builder y en el *.h delega del mismo:

@interface CategoriasViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, SqlClientDelegate>

Alguien puede ayudarme a ver los datos de la SQL en una tabla??

preguntado 26 Abr '11, 13:12

ojosdehielo's gravatar image

ojosdehielo
299192942

editó 26 Abr '11, 13:32

juanmac's gravatar image

juanmac ♦
2.9k294081

Buenas ojosdehielo,

Intenta, por favor, que el código salga bien formateado al preguntar. Cualquier línea de texto con más de 4 espacios al principio se interpreta como código.

Pasando a tu pregunta, aunque esto no la contesta, ¿por qué haces release del arraGamas cuando ya le has puesto el autorelease?

(26 Abr '11, 13:32) juanmac ♦

gracias por vuestra ayuda pero al final consegui arreglarlo con el siguiente código:

 -(NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection: (NSInteger)section
  {
          if (self.dCategorias.count==0 ) {
            return 0;
          }else {
            return [self.dCategorias count];
          }
  }

Victor consegui poner el Reload pero no me hacia nada, sin embargo cambiando esta funcion si que me funciona y me muestra todo lo que necesito.

Lo dicho gracias

enlace permanente

respondido 28 Abr '11, 09:30

ojosdehielo's gravatar image

ojosdehielo
299192942

qué raro. Si la condición viene a ser un noop

(28 Abr '11, 10:09) victor

Te falta la llamada a [self.table reloadData] al final de sqlQueryDidFinishExecuting:. Esta es la que hace que se vuelva a llamar a numberOfSections, numberOfRowsInSection: y todos los otros métodos para poblar la tabla.

enlace permanente

respondido 26 Abr '11, 17:33

victor's gravatar image

victor
2.8k51248

editó 26 Abr '11, 17:35

juanmac lo siento por el formato, soy nueva y no sabia como se hacia, gracias por ponerlo tu bien. En respuesta a tu pregunta, pues lo puse por defecto, no me di cuenta de que lo habia declarado como autorelease.

victor, no pongo [self.table reloadData] porque me da error y no se puede compilar. Yo he creado la tabla desde el Interface Builder y estoy trabajando sobre un ControllerView.

 @interface CategoriasViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, SqlClientDelegate>

gracias

enlace permanente

respondido 27 Abr '11, 13:28

ojosdehielo's gravatar image

ojosdehielo
299192942

editó 27 Abr '11, 13:38

No pasa nada. @victor tiene razón (cómo siempre...) Ahora me siento n00b por su culpa. Anda que no caer en eso.. xD

(27 Abr '11, 13:54) juanmac ♦

Tienes la UITableView en un outlet, no? si no se llama table, pues igual se llama view, no se. Pero sea como sea que le llamas, envíale un reloadData

(27 Abr '11, 15:25) victor
Tu respuesta:
Activar/desactivar vista previa