Ganerate insert query reading txt lines.

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Lefteris33
Δημοσιεύσεις: 93
Εγγραφή: 18 Μαρ 2010 15:10
Τοποθεσία: Δαφνη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από Lefteris33 » 18 Αύγ 2011 21:23

Έχω φτιάξει μία εφαρμογή σε Delphi η οποία διαβάζει ένα IBClinetDataset από ΙΒ Database και από αυτό δημιουργεί ένα αρχείο "morders.sql".
Η έξοδος του αρχείου έχει δοκιμαστεί ώστε να έχει την κατάλληλη σύνταξη για να εισάγει δεδομένα στον πίνακα (morders) μίας βάσης δεδομένων MySql.
Αφού η εφαρμογή το δημιουργήσει το κάνει upload σε συγκεκριμένο σημείο στον Server.
Εκεί αναλαμβάνει μία σελίδα (polisis.php) να διαβάσει το αρχείο να εισάγει δεδομένα στον πίνακα morders και να τα προβάλει.
Με δυσκολεύει το σημείο που διαβάζοντας τις γραμμές του morders.sql πρέπει να μπούν σε ένα mysql_query.
Παραθέτω το σημείο του κώδικα


$filename = "morders.sql";
$fp = fopen($filename, "r") or die ("Απέτυχε το άνοιγμα του αρχείου.");

while (!feof($fp)) {
$line = fgets($fp, 4096);
$add_topic_sql ="$line" ; //εισαγωγή των γραμμών στο query.
fclose($filename);
}
//Σύνδεση με την βάση δεδομένων.
include_once ("connecttodb_include.php");
doDB();
//εκτέλεση του query.
$add_topic_res = mysql_query($add_topic_sql);


Αποτυνχάνει το query να γεμίσει με τις γραμμές του morders.sql
Οι γραμμές του morders.sql είναι κάπως έτσι:

INSERT INTO `morders` (`number`, `odate`, `otime`, `tablenum`, `total`, `waitercode`, `tameio`) VALUES (6, '2011-08-08', '19:30:35', 7, 3.29999995231628, 33, 'ΤΡΑΠΕΖΙΑ');
INSERT INTO `morders` (`number`, `odate`, `otime`, `tablenum`, `total`, `waitercode`, `tameio`) VALUES (7, '2011-08-08', '19:31:45', 7001, 3.79999995231628, 10, 'DELIVERY');
INSERT INTO `morders` (`number`, `odate`, `otime`, `tablenum`, `total`, `waitercode`, `tameio`) VALUES (9, '2011-08-08', '19:39:17', 7001, 3.40000009536743, 10, 'DELIVERY');

και με χειροκίνητο inport από την MySql εισάγονται κανονικά.
Μπορεί κάποιος να βοηθήσει.

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από xultimatex » 18 Αύγ 2011 21:52

Αρχικά μπορείς να αντικαταστήσεις την γραμμή:

Κώδικας: Επιλογή όλων

$add_topic_res = mysql_query($add_topic_sql); 
με

Κώδικας: Επιλογή όλων

$add_topic_res = mysql_query($add_topic_sql) or die(mysql_error()); 
και να μας πεις ποιο είναι το error που πετάει η mysql.
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Lefteris33
Δημοσιεύσεις: 93
Εγγραφή: 18 Μαρ 2010 15:10
Τοποθεσία: Δαφνη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από Lefteris33 » 18 Αύγ 2011 22:02

Την γραμμή την πρόσθεσα δεν βγαίνει κανένα μήνυμα.
Τον τρόπο που διαβάζω τις γραμμές του αρχείου και τις αποδίδω στο query τον βρίσκεις σωστό?
Lefteris Toumanidis websitepro

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από xultimatex » 18 Αύγ 2011 22:11

Όχι δεν είναι σωστός. Θα δουλέψει μόνο για την τελευταία γραμμή. Δοκίμασε έτσι:

Κώδικας: Επιλογή όλων

$filename = "morders.sql";
$fp = fopen($filename, "r") or die ("Απέτυχε το άνοιγμα του αρχείου.");
//Σύνδεση με την βάση δεδομένων.
include_once ("connecttodb_include.php");
doDB();

while (($line = fgets($fp, 4096) !== false) {
$add_topic_sql ="$line" ; //εισαγωγή των γραμμών στο query.
//εκτέλεση του query.
$add_topic_res = mysql_query($add_topic_sql);
}
fclose($filename);
Σημείωση: Η fgets() σταματάει να διαβάζει όταν βρει EOF(τέλος αρχείου) ή χαρακτήρα αλλαγής γραμμής. Αν όταν εκτυπώνεις το αρχείο αλλάζεις και γραμμές τότε πρέπει να παίρνεις επαναλληπτικά τις γραμμές.
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Lefteris33
Δημοσιεύσεις: 93
Εγγραφή: 18 Μαρ 2010 15:10
Τοποθεσία: Δαφνη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από Lefteris33 » 18 Αύγ 2011 22:38

Δούλεψε!
Απορία : κάθε ένα λεπτό η εφαρμογή της Delphi θα κάνει loop την λειτουργία της.
Δηλαδή θα ξαναφορτώνει το Query θα δημιουργεί το morders.sql και θα το ανεβάζει στον server.
Απο την πλευρά του Server η σελίδα polisis.php θα κάνει refresh κάθε ένα λέπτό με όλες τις λειτουργίες php που έχει.
Μήπως θα πρέπει το script πριν αρχίσει να διαβάζει το morders.sql, να "αδειάζει" τον πίνακα morders?
Lefteris Toumanidis websitepro

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από xultimatex » 18 Αύγ 2011 22:44

Εννοείς τον πίνακα της βάσης; Αυτό δεν μπορώ να σου το πω γιατί δεν ξέρω τι θέλεις να κάνεις. Αν τα προηγούμενα δεδομένα σου είναι τελείως άχρηστα, σβήστα.

Αν θέλεις ένα realtime σύστημα που ανανεώνεται κάθε ένα λεπτό ίσως να είναι σπατάλη πόρων η χρήση της mysql. Αυτό το τελευταίο πολύ θεωρητικά γιατί όπως είπα δεν ξέρω τί θες να κάνεις!
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Lefteris33
Δημοσιεύσεις: 93
Εγγραφή: 18 Μαρ 2010 15:10
Τοποθεσία: Δαφνη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από Lefteris33 » 18 Αύγ 2011 22:53

Εξηγώ το ζητούμενο της εφαρμογής.
Εχω ενα εστιατορικό πρόγραμμα γραμμένο σε Delphi με βάση δεδομένων Firebird IB.

Θέλω να πάρω τις πωλήσεις της ημέρας να τις ανεβάσω στον server για να μπορεί ο χρήστης με ένα Login να βλέπει τις πωλήσεις και να ανανεώνονται κάθε ένα λεπτό (εκτός καταστήματος στην παραλία δηλαδή με ένα smartphone).
Lefteris Toumanidis websitepro

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από xultimatex » 18 Αύγ 2011 22:59

Ιδέα: Η Delphi αντί να παράγει sql queries, να παράγει δεδομένα σε αξιποιήσιμη μορφή. Δηλαδή, εναν πίνακα κάπως έτσι:

Κώδικας: Επιλογή όλων

number, odate, otime, tablenum, total,waitercode, tameio
Αυτά να είναι αποθηκευμένα στο αρχείο και μετά από ένα λεπτο η delphi να το αντικαθιστά. Γλιτώνεις δηλαδή το βάλε βγάλε στη βάση που καταναλώνει πόρους. Κάθε φορά που ο ιδιοκτήτης θέλει να ενημερωθεί διαβάζεις το αρχείο.
Το αρχείο μπορεί να είναι και δομής XML. Ακόμα καλύτερα ώστε να μην παιδεύεσαι όταν διαβάζεις τα δεδομένα.

Εdit: Τώρα που το σκέφτηκα λίγο καλύτερα, αν έχεις πρόσβαση στο πρόγραμμα delphi μπορείς να το κάνεις να ενημερώνει το xml αρχείο κάθε φορά που γίνεται καινούρια εγγραφή και όχι κάθε ένα λεπτό. Μέχρι να γίνει νέα εγγραφή, ο ιδιοκτήτης θα ενημερώνεται από το παλιό αρχείο. Θα γίνει πολύ πιο κομψό έτσι... :)
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Lefteris33
Δημοσιεύσεις: 93
Εγγραφή: 18 Μαρ 2010 15:10
Τοποθεσία: Δαφνη
Επικοινωνία:

Ganerate insert query reading txt lines.

Δημοσίευση από Lefteris33 » 18 Αύγ 2011 23:15

Ωραία ιδέα.
Βέβεια θέλει trigers στην Firbird που να πυροδοτούν την εξαγωγή του xml κάθε φορά που γίνετε νέα εγγραφή.
Λίγο μανίκι στην Delphi και δεν θέλει και πολλά πειράγματα η βάση γιατί έχει 64 πίνακες και συνδεδεμένα views, trigers, κα.
Είναι όμως η ποιό σωστή και ελαφριά λύση.
Θα προσπαθήσω να την δοκιμάσω.
Όπως και να έχει σε ευχαριστώ πολύ για την βοήθεια και τις ιδέες.
Το ρητό της υπογραφής πολύ σωστό!
Lefteris Toumanidis websitepro

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες