factuur opstellen / gegevens uit database met MYSQL

Status
Niet open voor verdere reacties.

BPsql

Gebruiker
Lid geworden
30 sep 2009
Berichten
14
Hallo iedereen,

Ik heb voor mijn schoonvader' bedrijfje een database gemaakt met oa klantgegevens, factuurgegevens, werkzaamheden etc. Hieruit wil ik automatisch voor elke klant 1 factuur per maand genereren.
Nu lukt het wel om een .txt en/of .doc te genereren met timestamp en bedrijfsnaam. Alleen ben ik nu aan het prutsen met allerlei select' en union alls om alles toonbaar te krijgen in het bestand zelf. Dat lukt ook wel, maar het is zo bewerkelijk.

Zo zou het er ongeveer uit moeten zien:

bedrijfsnaam
adresgegevens

datum
---------------------------------
omschrijving bedrag
---------------------------------
tegels 100x 99
zand 1 kuub 1
btw: 19
-----
119

Zelf ben ik PL/SQL gewend, maar niet de declare van MYSQL. Hebben jullie suggesties hoe ik dit het beste aanpakken? Wellicht heeft iemand wat voorbeelden?

Alvast bedankt,
 
De systematiek van procedures is in MySQL inderdaad wel wat anders dan in Oracle. Ik ben ook geen expert, maar met een paar voorbeelden moet je een heel eind kunnen komen. Gaat even niet om de inhoud maar als voorbeeld ;). Als je een procedure wilt gebruiken denk ik dat je het beste een text variabele kunt definiëren en deze gebruiken voor de opbouw van je rapport. Of het er veel eenvoudiger van wordt weet ik niet hoor, ik vind stored procedures in MySQL toch ook best bewerkelijk :).

Een voorbeeld van het gebruik van een cursor staat op deze pagina: http://dev.mysql.com/doc/refman/5.5/en/cursors.html

Functie:[sql]DROP FUNCTION IF EXISTS proportions;

DELIMITER $$

CREATE FUNCTION proportions( x INT, y INT )
RETURNS VARCHAR(9)
DETERMINISTIC READS SQL DATA
BEGIN
DECLARE x1 INT;
DECLARE y1 INT;

SET x1 = x;
SET y1 = y;

WHILE x <> y DO
IF x > y
THEN
SET x = x - y;
ELSE
SET y = y - x;
END IF;
END WHILE;

RETURN CONCAT( ROUND( x1 / x ), ':', ROUND( y1 / x ) );
END;
$$

DELIMITER ;[/sql]

Aanroep:[sql]mysql> select proportions( 1440, 900 ) FROM dual;
+--------------------------+
| proportions( 1440, 900 ) |
+--------------------------+
| 8:5 |
+--------------------------+
1 row in set (0.01 sec)[/sql]

Procedure:[sql]DROP PROCEDURE purge_master_logs;

DELIMITER $$

CREATE DEFINER = 'user'@'localhost'
PROCEDURE purge_master_logs( OUT po_return TEXT )
BEGIN

-- Logging
DECLARE l_name VARCHAR(100) DEFAULT 'purge_master_logs';
DECLARE l_user VARCHAR(100) DEFAULT user();
DECLARE l_log BOOLEAN DEFAULT FALSE;
DECLARE l_result TEXT DEFAULT '';
DECLARE l_version VARCHAR(10) DEFAULT 'D1.3';
-- Procedure
DECLARE p_purge_days INT DEFAULT 3;
DECLARE p_var_name VARCHAR(100);
DECLARE p_var_value VARCHAR(100);
DECLARE p_hostname VARCHAR(100) DEFAULT @@hostname;

IF p_hostname IS NOT NULL
THEN

IF p_purge_days IS NULL THEN SET p_purge_days = 3; END IF;

PURGE MASTER LOGS BEFORE DATE_SUB( CURRENT_DATE, INTERVAL p_purge_days DAY );

SET l_result = CONCAT( 'Purgen van master logs uitgevoerd op '
, p_hostname
, ' voor logs ouder dan '
, p_purge_days
, ' dagen.' );

END IF;

SET po_return = l_result;

END;
$$

DELIMITER ;[/sql]

Aanroep:[sql]mysql> call purge_master_logs( @result );
Query OK, 0 rows affected (0.00 sec)

mysql> select @result from dual;
+----------------------------------------------------------------------------+
| @result |
+----------------------------------------------------------------------------+
| Purgen van master logs uitgevoerd op hostname voor logs ouder dan 7 dagen. |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)[/sql]
 
factuur opstellen lukt, maar daarna?

He,

Bedankt voor je suggestie. Ondertussen is het gelukt om met een procedure en set statement een factuur op te laten stellen. Nu zit ik met het volgende: elk factuur wordt aangemaakt met als bestandsnaam, de naam van het bedrijf met de datum, dus bijvoorbeeld "Jan_de_Timmerman_20-01-2012.txt". Dit doe ik met behulp van

set @factuur = concat(" hier alles wat in de factuur komt
into_file(/c:/mapje/mapje", select @naam_bedrijf, date_format.......);

Nu wil ik echter ook de factuur in de database laden met LOAD_FILE, maar wel weer met de variabelen @naam en date_format, zodat de zojuist aangemaakt factuur ook nog eens in de database geladen wordt. Als ik de bestandsnaam letterlijk erin zet, lukt het, maar niet met de variabelen.......wie weet een goede oplossing

Alvast bedankt,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan