Newsgroup: it.comp.lang.delphi
Titolo: Delphi - SQL Server e gestionale

Salve a tutti, 
è possibile tramite query sql avere il saldo? Mi spiego.
Io ho una tabella pippo con i campi debito e credito. Come faccio faccio
tramite query a far apparire il terzo campo che non è dato dalla
differenza tra debito e credito ma dal saldo di partenza che si
imcrementa/decrementa in ogni record.
Ex:
debito credito saldo
1000     0     -1000
200      0     -1200
0       500    +700
0      1500    +800
si puo fare con una query sql? se si come?
Altrimenti come si puo fare sempre usando la tquery di delphi?
Aggiungo un campo calcolato? se si come si implementa?
Grazie mille
              Marco
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Crea una stored proc, in cui crei una tabella temporanea in (campo chiave
identity autoincrementante, debito, credito saldo)
insert into tabella temporanea (debito, credito) select credito, debito from
pippo
poi in una variabile intera ti salvi @@ROWCOUNT
fai un ciclo di scansione della tabella temporanea, in cui il tuo indice di
ciclo servirà a selezonara la tabella temporanea per Id, ti calcoli il saldo
variabile per ogni record andadolo a salvare in ogni record con una update.
poi, per tornare indietro il risultato,
select * from tabella temporanea,
drop table tabella temporanea (se la crei con prefisso "#" il drop table è
superfluo)
Se vuoi un esempio di codice, domani te lo spedisco, adesso non ho niente
sottomano.
Ciaoux

Eccoti una mia stored proc di esempio, scremala, ma dovrebbe essere
chiara:
CREATE PROCEDURE OspManifest
/* ------------------------------------------ */
/*         STAMPA MANIFEST VIA AEREA          */
/* ------------------------------------------ */
@MawbId as numeric
AS
DECLARE @Commodities varchar(500), @Broker varchar(150)
SET     @Commodities = ''
SET     @Broker      = ''
CREATE TABLE ManifestTemp (KeyId numeric identity(1,1), HawbId integer,
HawbNr varchar(18), NrCart integer, GWK float, Valmerce float,
                            CurrCode varchar(4), CollCharges float,
Commodities varchar(500), Consignee varchar(150), Broker varchar(150),
			    BrokerId integer, BrokerIdd integer)
INSERT INTO ManifestTemp
(HawbId, HawbNr, NrCart, GWK, Valmerce, CurrCode, CollCharges,
Commodities, Consignee, Broker, BrokerId, BrokerIdd)
(SELECT 
        HOUSEID     = H.Id,
  	HOUSENUMBER = H.Number,
	NCARTONI    = H.Pieces,
	GWK         = H.Gwt,
	VALORE      = (Select SUM(ValMerce )
		       From Shipment
		       Where HawbId = H.Id and Via = 0 and Deleted = 0),
	CURRCODE    = (Select CurrencyCod 
		       From Companie as C
			    left join Nation as N on (N.Id = C.CountryId)
		       Where C.Id = H.CompanyId),
	COLLCHARGES = ISNULL((Select ChargeDueCarrier + ChargeDueAgent 
		              From Hawb
		              Where Id = H.Id and Collect = 1), 0),
	COMMODITIES = @Commodities,
	CONSIGNEE   = (Select DEXCONSIGNEE = 
						RTRIM((ISNULL(A.name,   ISNULL(AD.name,''))))   + Char(13) +
						RTRIM((ISNULL(A.Aline1, ISNULL(AD.Aline1,'')))) + Char(13) +
						RTRIM((ISNULL(A.zip,    ISNULL(AD.zip,''))))    + ' ' +
						RTRIM((ISNULL(A.City,   ISNULL(AD.City,''))))   + ' ' +
						RTRIM((ISNULL(N1.Description , ISNULL(N2.Description,''))))
		       From
				Hawb                as H2
			 	left join Anagra    as A  on (H2.ConsigneeID = A.Id)
			 	left join AnagraD   as AD on (H2.ConsigneeIDD = AD.Id)
			 	left join Nation    as N1 on (A.CountryId = N1.Code)
			 	left join Nation    as N2 on (AD.CountryId = N2.Code)
		       Where H2.Id = H.Id),
        BROKER      = @Broker,
	BROKERID    = (Select BrokerID
		       From AnagraLoc  
		       Where H.ConsigneeId = IdAnagra and H.ConsigneeIDD = IdAnagraD),
	BROKERIDD   = (Select BrokerIDD
		       From AnagraLoc  
		       Where H.ConsigneeId = IdAnagra and H.ConsigneeIDD = IdAnagraD)
FROM
	Hawb as H 
WHERE 
	H.MasterId = @MawbId )
DECLARE @NumRighe numeric, @I numeric, @AppHawbId integer, @AppBrokerId
integer, @AppBrokerIdd integer
SET @NumRighe  = @@ROWCOUNT
SET @I         = 1
WHILE @I <= @NumRighe
BEGIN
	SET @Commodities = ''
	SET @AppHawbId = (Select HawbId From ManifestTemp Where KeyId = @I)
	EXECUTE CommPerHouse @AppHawbId, @Commodities output
	UPDATE ManifestTemp SET Commodities = @Commodities WHERE KeyId = @I
	SET @Broker = (Select BROKER = 
						RTRIM((ISNULL(A.name,   ISNULL(AD.name,''))))   + Char(13) +
						RTRIM((ISNULL(A.Aline1, ISNULL(AD.Aline1,'')))) + Char(13) +
						RTRIM((ISNULL(A.zip,    ISNULL(AD.zip,''))))    + ' ' +
						RTRIM((ISNULL(A.City,   ISNULL(AD.City,''))))   + ' ' +
						RTRIM((ISNULL(N1.Description , ISNULL(N2.Description,''))))
		       From
				ManifestTemp       as MAN
			 	left join Anagra    as A  on (MAN.BrokerID = A.Id)
			 	left join AnagraD   as AD on (MAN.BrokerIDD = AD.Id)
			 	left join Nation    as N1 on (A.CountryId = N1.Code)
			 	left join Nation    as N2 on (AD.CountryId = N2.Code)
		       Where MAN.KeyId = @I)
	UPDATE ManifestTemp SET Broker = @Broker WHERE KeyId = @I
	SET @I = @I + 1 
END
SELECT HawbNr, NrCart, GWK, Valmerce, CurrCode, CollCharges,
Commodities, Consignee, Broker FROM ManifestTemp
NB !!!!!! : ManifestTemp qui non è temporanea, se lo fosse sarebbe 
#ManifestTemp, ma in questo caso mi serve che rimanga viva per una
stored proc
che richiamo in cascata a questa. 
Spero di essere stato di aiuto. CIAO!!!!


 Aggiungo un campo calcolato? se si come si implementa?
Potresti provare con il clientdataset e gli aggregati il campo saldo è
uguale all'aggregato del credito - l'aggregato del debito
Saluti