Array
(
)

Como incluir um array em uma tabela Sql Server

Rounilo
   - 05 dez 2007

Senhores

Uso o Delphi 7 e Sql Server (msde) com acesso ADO.

Gostaria de criar uma tabela com um campo de codigo de clientes e doze campos que contivessem o consumo mensal de, por exemplo, consumo de gas.

Tal qual as contas de luz, gas teria que, no 12º mes. ir substituindo o valor do 1º mes.

Como fazer isto? Pensei em uma tabela com codigo de cliente e um array de 12 campos, entretanto não sei como inserir um array em uma tabela.

Agradeço ajuda.


Psergio.p
   - 14 jan 2008

Caro amigo, isso não é possivel, criei os campos que você precisa dando um nome para cada um. Isso que você quer fazer acho que só o Progress faz!


Djjunior
   - 15 jan 2008

sei não mas não acho interessante você fazer uma tabela com 14 campos (um para desc outro para data e os outros 12 para Meses)

O melhor seria uma tabela com 3 campos (desc, data e valor) e no seu select você fazer algo do tipo

select top :Meses from
(select desc, data, valor from custos order by desc, data desc) contas

ai dentro do seu seu programa delphi você ajusta esses dados em uma memoryTable


Aroldo Zanela
   - 16 jan 2008

Colega,

Pode ser ainda mais simples que a forma a seguir, entretanto, para garantir a integridade dos dados, eu usaria uma tabela para os meses com uma constraint para a quantidade de linhas e a tabela de consumo seria uma associativa entre cliente e meses.
Veja o exemplo que modelei no PowerDesigner:

#Código


/*==============================================================*/
/* DBMS name: Microsoft SQL Server 2000 */
/* Created on: 16/1/2008 16:31:15 */
/*==============================================================*/


alter table CONSUMO
drop constraint FK_CONSUMO_RELATIONS_CLIENTES
go

alter table CONSUMO
drop constraint FK_CONSUMO_RELATIONS_MESES
go

if exists (select 1
from sysindexes
where id = object_id(´CLIENTES´)
and name = ´CLIENTES_PK´
and indid > 0
and indid < 255)
drop index CLIENTES.CLIENTES_PK
go

if exists (select 1
from sysindexes
where id = object_id(´CONSUMO´)
and name = ´CONSUMO_PK´
and indid > 0
and indid < 255)
drop index CONSUMO.CONSUMO_PK
go

if exists (select 1
from sysindexes
where id = object_id(´MESES´)
and name = ´MESES_PK´
and indid > 0
and indid < 255)
drop index MESES.MESES_PK
go

if exists (select 1
from sysobjects
where id = object_id(´CLIENTES´)
and type = ´U´)
drop table CLIENTES
go

if exists (select 1
from sysobjects
where id = object_id(´CONSUMO´)
and type = ´U´)
drop table CONSUMO
go

if exists (select 1
from sysobjects
where id = object_id(´MESES´)
and type = ´U´)
drop table MESES
go

/*==============================================================*/
/* Table: CLIENTES */
/*==============================================================*/
create table CLIENTES (
CLIE_ID int not null,
CLIE_NOME varchar(60) not null
)
go

/*==============================================================*/
/* Index: CLIENTES_PK */
/*==============================================================*/
create unique index CLIENTES_PK on CLIENTES (
CLIE_ID ASC
)
go

/*==============================================================*/
/* Table: CONSUMO */
/*==============================================================*/
create table CONSUMO (
CONS_ID int not null,
CLIE_ID int null,
MES_ID int null,
CONS_QTDE int not null
)
go

/*==============================================================*/
/* Index: CONSUMO_PK */
/*==============================================================*/
create unique index CONSUMO_PK on CONSUMO (
CONS_ID ASC
)
go

/*==============================================================*/
/* Table: MESES */
/*==============================================================*/
create table MESES (
MES_ID int not null
constraint CKC_MES_ID_MESES check (MES_ID between 1 and 12),
MES_NOME varchar(10) not null
)
go

/*==============================================================*/
/* Index: MESES_PK */
/*==============================================================*/
create unique index MESES_PK on MESES (
MES_ID ASC
)
go

alter table CONSUMO
add constraint FK_CONSUMO_RELATIONS_CLIENTES foreign key (CLIE_ID)
references CLIENTES (CLIE_ID)
go

alter table CONSUMO
add constraint FK_CONSUMO_RELATIONS_MESES foreign key (MES_ID)
references MESES (MES_ID)
go




Rounilo
   - 18 jan 2008

OK.
Obrigado a todos.

Rounilo