Seneste forumindlæg
Køb / Salg
 * Uofficiel Black/White liste V3
Login / opret bruger

Forum \ Programmering og webdesign \ Programmering
Denne tråd er over 6 måneder gammel

Er du sikker på, at du har noget relevant at tilføje?

C++ / Mysql / System

Af Elitebruger jakob_lk | 30-09-2005 20:50 | 2478 visninger | 30 svar, hop til seneste
Hej.. Jeg er ved at prøve mig frem med c++ og mysql. men det er sku ikke helt så let som det lige virke til.. så vil gerne have lidt hjælp.. jeg køre en while hvor den skriver alle name og id ud fra en tabel men jeg vil så gerne have den til at blande det sammen med lidt mere. Det skal være sådan at den henter alle name og id fra min tabel og bruger dem to til at køre et andet linux script på min server. har tænkt mig det skal se sådan ud. system(echo '<name fra tabek>'|/root/status --id <id fra tabel>) nå den så har køret det skal den gå ind og updater et felt ' disabled' og rette værdien til 1. Håber der en som kan hjælpe mig. Desvære har jeg ikke rigtig nogle point at gi, men håber der er en vendelig person som vil hjælpe mig.
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#1
Steffen
Gæst
30-09-2005 10:06

Rapporter til Admin
Har ikke lige læst din kode, da jeg har travlt pt. Men hvis du kan forklare hvad problemet/fejlen er så skal jeg nok følge op på det imorgen over middag engang.
--
Gæstebruger, opret dit eget login og få din egen signatur.
#2
jakob_lk
Elitebruger
30-09-2005 21:50

Rapporter til Admin
Her er min kode hvis nogle kan hjælpe ! #include <cstdio> #include <cstdlib> #include <iostream> using namespace std; #include "/usr/include/mysql/mysql.h" int main() { /* connection */ MYSQL *handle; /* query result */ MYSQL_RES *result; /* række i query result */ MYSQL_ROW row; /* antal felter i query result */ int nfields; /* pointer til array med felt længder i række i query resuult */ int *l; /* counter */ int i; /* * åben connection til: * server = "localhost" * username = "root" * password = "" * database = "Test" * port = 0 (bliver opfattet som default 3306) */ handle= mysql_init(NULL); if(handle == NULL) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } if(!mysql_real_connect(handle, "localhost", "root", "", "test", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } /* udfør query */ mysql_query(handle, "SELECT name FROM test"); result = mysql_store_result(handle); /* print resultat af query */ nfields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { l = (int *)mysql_fetch_lengths(result); for (i=0; i<nfields; i++) { printf(" %.*s", row ? l : 4, row ? row : "NULL"); } printf(" "); } /* luk query */ mysql_free_result(result); /* luk connection */ mysql_close(handle); return 0; }
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#3
jakob_lk
Elitebruger
30-09-2005 22:49

Rapporter til Admin
selv kode virker som det skal .. det er bare det sted hvor jeg skal bruge dataen fra mysql Jeg vil gerne hvis jeg kunne bruge dataen som i php. Fx. system(echo '<name fra tabek>'|/root/status --id <id fra tabel>) Det er den system commando jeg gerne vil have kørt. hvor den så i <name fra tabek> og <id fra tabel> bruger dataen fra mysql. Når den så har gjordt det skal den update i den date den lige har hentet ud. Den skal rette "disabled" fra 0 til 1
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#4
Steffen
Gæst
01-10-2005 12:08

Rapporter til Admin
Hmm ja den var værre, ved ikke lige om der en funktion til at hive de bestemte ting fra row'en, men ellers må du nærmest lave en selv jo :/ Alternativt kan du hive dem fra databasen seperat - dog lidt surt også. Den disabled du omtaler, er det et felt i databasen eller ?
--
Gæstebruger, opret dit eget login og få din egen signatur.
#5
jakob_lk
Elitebruger
02-10-2005 14:12

Rapporter til Admin
Hmm...ved ikke lige hvordan jeg skal lave det da jeg ikke er helt inde i det.... Det disabled det er et felt i databassen.
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#6
Steffen
Gæst
02-10-2005 19:42

Rapporter til Admin
#5 > Ok, for at update disabled laver du jo bare en sql query mere: char tmp[256]; mysql_query(handle, "SELECT id FROM test"); result = mysql_store_result(handle); row = mysql_fetch_row(result); sprintf (tmp, "UPDATE test SET disabled=1 WHERE id=%s", row); mysql_query(handle, tmp); Så updater den disabled (forudsat row er en streng, vil jeg dog tro den er, men hvis ikke så %i istedet) Mht. at hive dataene ud, kan du så ikke lave en "SELECT * FROM test" og så print("%s", row); Og skrive hvad den så skriver på skærmen, her i forummet. Så skal jeg nok bikse noget kode sammen til formålet.
--
Gæstebruger, opret dit eget login og få din egen signatur.
#7
jakob_lk
Elitebruger
05-10-2005 17:41

Rapporter til Admin
Ved ikke om jeg har gjordt det rigtig, men jeg har ændret det til.. /* #include <cstdio> #include <cstdlib> #include <iostream> using namespace std; #include "/usr/include/mysql/mysql.h" int main() { /* connection */ MYSQL *handle; /* query result */ MYSQL_RES *result; /* række i query result */ MYSQL_ROW row; /* antal felter i query result */ int nfields; /* pointer til array med felt længder i række i query resuult */ int *l; /* counter */ int i; /* * åben connection til: * server = "localhost" * username = "root" * password = "" * database = "Test" * port = 0 (bliver opfattet som default 3306) */ handle= mysql_init(NULL); if(handle == NULL) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } if(!mysql_real_connect(handle, "localhost", "root", "", "test", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } /* udfør query */ mysql_query(handle, "SELECT name FROM test"); result = mysql_store_result(handle); /* print resultat af query */ nfields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { print("%s", row); printf(" "); } /* luk query */ mysql_free_result(result); /* luk connection */ mysql_close(handle); return 0; } */ Og når jeg comepiler den får jeg følgende fejl. sms.cpp: I function 'int main()': sms.cpp:45: error: `print' undeclared (first use this function) sms.cpp:45: error: (Each undeclared identifier is reported only once for each function it appears in.) Hvis det bedre passer dig kan du fange mig på mail : smaakage @ kagenet.dk
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#8
Steffen
Gæst
06-10-2005 10:47

Rapporter til Admin
while ((row = mysql_fetch_row(result))) { print("%s", row); printf(" "); Den understregede linie skal være printf, det er bare en slå fejl :)
--
Gæstebruger, opret dit eget login og få din egen signatur.
#9
jakob_lk
Elitebruger
06-10-2005 19:39

Rapporter til Admin
Nu jeg jeg prøvet med i og s og jeg får nogle meget mærkelig output. jeg går bare nogle tal, og ingen af dem har jeg i databassen.. Intete af det giver nogle mening..
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#10
Steffen
Gæst
07-10-2005 08:45

Rapporter til Admin
Hmmm nedtur, hvad output skrev den med din oprindelige kode (den fra #0) ?
--
Gæstebruger, opret dit eget login og få din egen signatur.
#11
FreakCERS
Gæst
07-10-2005 09:15

Rapporter til Admin
#9+10 mon ikke MYSQL_ROW row er en struct eller array? (linked list?) og ikke en streng? - så ville printf("%s", row); jo bare give nogle 'tilfældige' RAM-adresser... - har ikke lige tid til at undersøge det nu, men måske senere på dagen :-)
--
Gæstebruger, opret dit eget login og få din egen signatur.
#12
FreakCERS
Gæst
07-10-2005 10:01

Rapporter til Admin
yup - sådan er MYSQL_ROW defineret: typedef char **MYSQL_ROW; og nu kan jeg jo knapt huske hvordan sådan noget skal gøres, men prøv evt printf("%s", &row);
--
Gæstebruger, opret dit eget login og få din egen signatur.
#13
Steffen
Gæst
07-10-2005 10:02

Rapporter til Admin
#11 > Det var jo ikke til at vide før vi testede det, vel ? :) Har aldrig brugt SQL og C sammen, og da jeg ikke har database og kode, kan jeg ikke lave den slags tests selv. Men jo meget tyder på en struct/array, hvilket egentlig kun gør tingene nemmere - når vi lige hitter ud af hvad formatering denne har.
--
Gæstebruger, opret dit eget login og få din egen signatur.
#14
Steffen
Gæst
07-10-2005 10:35

Rapporter til Admin
Ah en **, det forklarer jo en del :) Men din kode er gal, det skal være: printf("%s", *row); På den anden måde går du i modsatte retning :) (& = address of) Så #0 prøv at lave en printf("%s", *row); og skriv outputtet herinde.
--
Gæstebruger, opret dit eget login og få din egen signatur.
#15
Steffen
Gæst
07-10-2005 10:37

Rapporter til Admin
Uhm btw. når det er ** burde det vel egentlig være et array af char*. men en row er jo bare en row. Hmmm meget mystisk. Hvis printf("%s", *row) giver sære resultater, så prøv: printf("%s", row[0]);
--
Gæstebruger, opret dit eget login og få din egen signatur.
#16
Steffen
Gæst
07-10-2005 10:58

Rapporter til Admin
Efter at have tænkt lidt mere over det, så tror jeg at jeg har en løsning der spiller. I din oprindelige kode fra #0 er følgende: for (i=0; i<nfields; i++) { printf(" %.*s", row ? l : 4, row ? row : "NULL"); } Hvis du erstatter det understregede med: printf("%s ", row[i]); Så skulle den gerne spytte hver felt ud på en linie for sig (f.eks. select Navn, Adresse from Personer) så får du: Navn Adresse Hvis du får et sådanne resultat, kan du tilgå row ligesom i php, altså row[0] er det første i dit select statement, row[1] det næste, osv.
--
Gæstebruger, opret dit eget login og få din egen signatur.
#17
FreakCERS
Nørd
07-10-2005 12:05

Rapporter til Admin
#13 hvis nu man kører linux kunne man bare se efter her: /usr/include/mysql/mysql.h (se linie 90) - i windows ved jeg ikke lige hvor den ligger, men... :-) #15 row er jo også en slags tupple, altså en array af strings - så det er vel egentlig klart at den bliver nødt til at være **
--
The opposite of a correct statement is a false statement. But the opposite of a profound truth may well be another profound truth. -- Niels Bohr
#18
Steffen
Gæst
07-10-2005 12:13

Rapporter til Admin
#17 > Jah det kan man vel sige, en anden mulighed var en sammenkædet string med f.eks. komma separering. Mht. at se i .h filen sidder jeg ved en maskine uden compiler - så har ingen headers at se på :D
--
Gæstebruger, opret dit eget login og få din egen signatur.
#19
jakob_lk
Elitebruger
07-10-2005 20:27

Rapporter til Admin
Hej... Nu har jeg fået den til at udskive navn, men den gentar det bare lige så mangle gang som der er felter...
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#20
jakob_lk
Elitebruger
07-10-2005 20:29

Rapporter til Admin
Har fundet ud af det :)
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#21
jakob_lk
Elitebruger
07-10-2005 20:54

Rapporter til Admin
men jeg har leget lidt med det databasse update. og kan ikke helt få det til at virke !!
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#22
Steffen
Gæst
08-10-2005 01:02

Rapporter til Admin
Hej igen, har ikke lige haft tid, men er klar nu. Du har fået den til at hive felterne og lave system(blabla) eller hvordan? Det med at update disabled er det der volder problemer nu, korrekt ? Kan du ikke lige give mig det select statement du bruger (altså select Navn, Id, whatever from hvor) Jeg går ud fra dit SELECT Navn from TEST ikke er det endelige statement ?
--
Gæstebruger, opret dit eget login og få din egen signatur.
#23
jakob_lk
Elitebruger
08-10-2005 19:36

Rapporter til Admin
Hej... har lige lagt en kopi op så du kan se hvordan det ser ud pt. http://kagenet.dk[...] jeg kan godt hive data ud fra et enkelt felt, men det med system og update mangler jeg stadig..
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#24
Steffen
Gæst
10-10-2005 08:47

Rapporter til Admin
Du må i øvrigt gerne lige skrive, om det virker :)
--
Gæstebruger, opret dit eget login og få din egen signatur.
#25
Steffen
Gæst
10-10-2005 11:07

Rapporter til Admin
Hejsa, havde næsten glemt dig her i weekenden :D Men nu er jeg frygteligt tilbage. Det er muligt du lige skal #include <stdio.h> også, men prøv om det duer uden (du har cstdio, den tjener muligvis formålet, hvis ikke så include stdio) Derudover har du tre variabler der ikke bruges: int *l int i int nfields nfields bliver dog udfyldt, men derefter ikke anvendt. Hvis du ikke vil udbygge programmet bør du fjerne disse. Jeg har ændret indrykning og kommentering af din kode lidt, håber ikke det er alt for slemt at læse :) Men du kan finde koden her, den burde gøre det du ønsker (vise navn og id, update disabled, lave system kaldet) http://up.peecee.dk[...]
--
Gæstebruger, opret dit eget login og få din egen signatur.
#26
jakob_lk
Elitebruger
10-10-2005 22:51

Rapporter til Admin
Hej....det ser rigtig godt ud og tror også det virke, men tror jeg har lavet en fejl i min system commando... er der ikke en måde jeg kan få skrevet den ud så jeg kan se hvad der går galt ?
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#27
jakob_lk
Elitebruger
10-10-2005 22:55

Rapporter til Admin
Og hvad står det der char tmp[100]; endelig for det?? de 100 ?
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#28
Steffen
Gæst
11-10-2005 07:29

Rapporter til Admin
#26 > Altså du vil gerne se hvad din system kommando ender op som ? Det er nemt nok, du ændrer bare følgende: system(tmp); til printf(tmp); mht. char tmp[100]; så betyder de 100 at der er plads til 100 tegn (f.eks. fylder "hej" 3 tegn). 100 er langt mere end rigeligt, men da hver tegn kun fylder 1 byte, og dit program er meget småt, synes jeg ikke der er grund til at enten: a. allokere dynamisk eller b. finde en max værdi der passer nøjagtigt så derfor de 100, i større programmer bør man nok allokere dynamisk, men som sagt i dit tilfælde er det ligegyldigt :)
--
Gæstebruger, opret dit eget login og få din egen signatur.
#29
jakob_lk
Elitebruger
12-10-2005 22:26

Rapporter til Admin
Hej.... DU er bare en skatter... ikke nok med at du næsten har lavet det, men jeg er også vil at kunne se lidt hvordan det c++ virker... Mange gange tak !
--
Skype : kagenet MSN : SmaaKage(at)KageNet.dk HP : www.KageNet.dk[...]
#30
Steffen
Gæst
13-10-2005 08:23

Rapporter til Admin
#29 > Det var så lidt :) Hvis du har lyst til lidt tutorials, etc. så slå et smut forbi: http://www.freeprogrammingresources.com[...] der er en masse af slagsen :)
--
Gæstebruger, opret dit eget login og få din egen signatur.

Opret svar til indlægget: C++ / Mysql / System

Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.

Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.

Opret bruger | Login
NYHEDSBREV
Afstemning