WinFuture-Forum.de: Kleines Software-Backup Project - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Kleines Software-Backup Project

#16 Mitglied ist offline   JohnnyHenver 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 29. September 15
  • Reputation: 0

geschrieben 21. Oktober 2015 - 11:29

Nochmal zu der Chocolatey Geschichte.
Wenn das ein Open-Source Projekt mit einer Online-Datenbank ist (ich denke mal sql?), kann ich dann Zugriff auf diese Datenbank anfragen?
Wollte nachher mal eine eMail an die schreiben, aber die sagen schon auf ihrer Website, dass sie immense Probleme haben ihre Mails/Anfragen abzuarbeiten.
0

Anzeige



#17 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 21. Oktober 2015 - 13:21

Wenn sie eine API haben, ja. Sonst vermutlich nicht. Auf DB-Server sollte da kein (direkter) Zugriff übers Internet möglich sein (per Design).

Möglicherweise sind sie aber willens, Dir einen Dump zur Verfügung zu stellen. Den müßstest Du dann halt selber einlesen und verwenden.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#18 Mitglied ist offline   JohnnyHenver 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 29. September 15
  • Reputation: 0

geschrieben 22. Oktober 2015 - 14:54

Habe denen mal ne Mail geschickt, mal sehen wann/ob ich eine Antwort bekomme^^

Folgendes Problem:
Meine Copy/Paste/Delete Funktionen verwirkliche ich mithilfe von Batch-Dateien, welche von meiner main.exe ausgeführt werden sollen.

Ich muss dazu Pfade/Namen usw an die Batch-Dateien übergeben. Diese stehen in meiner Datenbank und werden in Variablen geladen.
Frage: Wie gebe ich den Batch-Dateien den Inhalt der Variablen als Parameter mit?

return system("C:\\Users\\tt-ah\\Desktop\\Projekt\\bat\\maketest.bat /test1");

So übermittle ich einer der Dateien den Parameter "test1". Dieser wird direkt als String interpretiert. Hätte ich im C++-Programm eine Variable namens test1, würde trotzdem test1 als String übergeben werden.... <_<
Gibts da nen Kniff den ich übersehe?
EDIT: Habe nen Ansatz mit sprintf gefunden den ich mal noch probieren werde...

Dieser Beitrag wurde von JohnnyHenver bearbeitet: 23. Oktober 2015 - 08:49

0

#19 Mitglied ist offline   JohnnyHenver 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 29. September 15
  • Reputation: 0

geschrieben 13. November 2015 - 15:16

Hallo Leute^^

Habe bis jetzt einige Fortschritte gemacht und etwa 90% der Funktionen implementiert.
Was mir nun noch fehlt ist die Kommunikation zwischen meinem Programm und der Datenbank.
Aus Übungswecken wollte ich eigentlich auf eine SQL-Datenbank auf einem lokalen WAMP-Server zurückgreifen. (Eine Hash-Tabelle würde eigentlich auch ausreichen)
Leider scheitere ich da nun seit einer Weile und den Erklärungen im Internet kann ich nicht so ganz folgen.

Ich habe einen lokalen WAMP Server erstellt, dieser hat laut php-myadmin den Namen "mysql wampserver". Auf ihm sind derzeit 5 Datenbanken hinterlegt.

Wenn ich nun über VisualStudio eine Verbindung zu dem Server aufbauen will, sollte dies doch über "Datenbank hinzufügen -> Microsoft SQL Server -> Servername : mysql wampserver -> SQL-Authentifizierungsdaten -> Datenbankname" gelingen? :huh:

Da heißt es jedoch immer, dass der Server nicht gefunden werden kann.
Habe schon einige andere Einstellungen versucht, aber bekomme immer diese Meldung :/

Muss ich vielleicht etwas anderes als Microsoft SQL Server anwählen?

Stehe deswegen etwas auf dem Schlauch, hat da jemand einen Tipp für mich?

Grüße Alex und schönes Wochenende :8):
0

#20 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 13. November 2015 - 17:17

mysql!=MSSQL

Da musst du schon den passenden Datenbankkonnektor für mysql auswählen.
https://dev.mysql.co...connection.html
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#21 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 13. November 2015 - 17:41

Ganz ehrlich gesagt... find ich MSSQL zum Anschauen besser als MySQL. Das hat zuviele Dinge, die still und heimlich nicht gehen oder falsch gehen und wo man sich erst reinfuchsen muß und auch Ahnung haben muß, also dahingehend daß man weiß "okay, das ist Blödsinn, egal was MySQL sagt oder zuläßt".

--- Microsoft's SQL Server ist als Express auch kostenlos und wenn man das Komplettpaket holt mitsamt den Advanced Tools, dann ist da auch gleich noch das Management Studio dabei. Und mit VS kommt man auch gleich ran.

Nur so als Überlegung. Der Haken ist natürlich, daß man sich mit MSSQL eher an Windows bindet; wenn das Ganze also jetzt (oder sonstwann) auf einen Unixoiden verlegt werden soll, wird es mit MSSQL schwierig und da der Dialekt (T-SQL) auch ein anderer ist als bei MySQL kann man das auch nicht 1:1 übernehmen.


-- Und wo ich grad dabei bin. Sind jetzt die Daten irgendwie doch da? Also per DB-Dump oder sonstwie? :unsure: Denn falls ja bist Du mit dem DB-Dump zumindest "wahrscheinlich" (wenn auch nicht garantiert) erstmal an ein Datenbanksystem gebunden, wenn man mal Konverter außen vor läßt. Das gilt natürlich nicht, wenn die Daten anderweitig in die Datenbank importiert werden.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#22 Mitglied ist offline   JohnnyHenver 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 29. September 15
  • Reputation: 0

geschrieben 16. November 2015 - 09:31

Moin und danke für die Antworten.

Mit den Daten bin ich momentan ein bisschen am schummeln, da ich bisher keine Antwort von den Entwicklern bekommen habe. Nutze zurzeit die chocolatey-Suchfunktion um an die verfügbaren Versionsnummern zu gelangen. Habe jedoch auch schon eine Funktion geschrieben, welche mir die Versionsnummern aus URLs und URLs aus Sourcecode auslesen kann.

Mit der MySQL Installation bin ich eben noch am rumwurschteln, die scheint nicht so ganz erfolgreich verlaufen zu sein. Danach geb ich nochmal Rückmeldung obs klappt^^
0

#23 Mitglied ist offline   JohnnyHenver 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 29. September 15
  • Reputation: 0

geschrieben 17. November 2015 - 11:48

Hat jemand hier eine gute und vor allem für Anfänger ausgelegte Quelle für Registry I/O mit C++?
Irgendwie fängt alles was ich finde schon mit Dingen an die ich nicht verstehe.

Muss ja mit den normalen Funktionen gehen, also
HKEY hKey; 
RegCreateKeyEx(HKEY_CURRENT_USER,"Test",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
BYTE cString[]="Hallo, das ist der eigentliche Wert, der unter dem Namen EintragsName gespeicehrt wird"; 
RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,strlen(cString)+1);
DWORD dwNumber = 0; 
DWORD dwData = sizeof(DWORD); 
RegQueryValueEx(hKey,"EintragsName",0,0,(BYTE*)&dwNumber,&dwData);

usw usw.....

Aber um diese Funktionen benutzen zu können muss ich ja Microsoft.Win32 verwenden.

Jetzt die dumme Frage: Wie stell ich das an?
Habe die mir bekannten Schemata schon verwendet (include, using namespace, using) und nichts geht.
Müsste an einer Einstellung in VirtualStudio liegen.

Und wenn es irgendwann klappt gerät Microsoft.Win32 mit std in Konflikt?

Zur Zeit: Alles geschrieben als Konsolenapplikation mit namespace std.


!!!EDIT!!!
Hat sich erledigt, hatte nur einen Tippfehler in einer meiner Angänge.

Dieser Beitrag wurde von JohnnyHenver bearbeitet: 17. November 2015 - 13:45

0

#24 Mitglied ist offline   JohnnyHenver 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 29. September 15
  • Reputation: 0

geschrieben 20. November 2015 - 09:10

Folgende Frage:

Habe im Moment, meine Datenbank als csv Export realisiert. (Vorübergehend) :rolleyes:
Intern wird diese verarbeitet zu einer map<string, string[]> namens database.

Folgender Code:
void parseDB(map<string, string[]> &database) {
		for (auto const &ent1 : database) {
			for (int i = 0; i < sizeof(*ent1.second); i++) {
				if ((ent1.second[i])->length() == 0) {
					string col = ent1.
						//exitWithError("VN_DB: Missing String. COL: " + (ent1.first) + " ROW: " + (ent1.second) + ".");
				}
			}
	        }
}


Problem liegt in der Bedingung des if-statements. Es soll durch die Array-Elemente gelooped werden um zu sehen ob die Strings "leer" sind oder nicht. Der Zugriff auf das Array-Element scheint aber so nicht zu funktionieren, mir wird die erste Klammer innerhalb der Bedingung markiert mit der Meldung: "Der Ausdruck muss einen Zeigertyp aufweisen". :unsure:

Außerdem habe ich bei dem Versuch ein Paar bestehend aus einem String und einem String[] hinzuzufügen folgende Fehlermeldung:

Fehler	C2664	"void std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>::insert(std::initializer_list<std::pair<const _Kty,_Ty>>)" : Konvertierung von Argument 1 von "std::pair<std::string,std::string [20]>" in "std::pair<const _Kty,_Ty> &&" nicht möglich	



bzw:

Fehler (aktiv)		Keine Instanz von Überladene Funktion "std::map<_Kty, _Ty, _Pr, _Alloc>::insert [mit _Kty=std::string, _Ty=std::string [], _Pr=std::less<std::string>, _Alloc=std::allocator<std::pair<const std::string, std::string []>>]" stimmt mit der Argumentliste überein.



Ich verstehe dass die Typisierung nicht übereinstimmt, jedoch verstehe ich nicht weshalb dies der Fall ist o.O

Sourcecode:
	void OpenExport(const string &dbName, const int &s, const int &z) {

		map<string, string[]> database;
		ifstream csvexport;
		csvexport.open(dbName.c_str());

		if (!csvexport) {
			exitWithError("VN_DB: " + dbName + " Could not be found!\n");
		}

		for (int row = 0; row < z; row++ ) { //z
			string line = "";
			getline(csvexport, line);
			if (!csvexport.good()) {
				//cout << "END OF FILE REACHED" << endl;
				break;
			}
			string linearr[20];
			stringstream iss(line);
			string id;
			getline(iss, id, ';');

			for (int col = 0; col < s-1; ++col) { //s
				string val;
				getline(iss, val, ';');

				if (!iss.good()) {
					//cout << "END OF LINE REACHED" << endl;
					break;
				}
				stringstream convertor(val);
				convertor >> linearr[col];
				//cout << "added" << endl;
			}
			database.insert(pair<string, string[20]>(id, linearr));
		}
		csvexport.close();
		parseDB(database);
	}




Wie schreibe ich das syntaktisch korrekt? :huh:

EDIT: Hat sich, hoffentlich, erledigt.

Dieser Beitrag wurde von JohnnyHenver bearbeitet: 23. November 2015 - 10:59

0

#25 Mitglied ist offline   JohnnyHenver 

  • Gruppe: aktive Mitglieder
  • Beiträge: 22
  • Beigetreten: 29. September 15
  • Reputation: 0

geschrieben 08. Dezember 2015 - 16:21

Hallo Leute, ich melde mich mal wieder^^

Bin momentan dabei die Klasse zu schreiben, die Chocolatey in der PowerShell aufrufen soll.
Bin allerdings etwas überfordert mit den "Erklärungen" zu CREATEPROCESS auf msdn etc. daher suche ich nach einer etwas einfachereren Alternative, die das selbe schafft.

Die Funktion soll nur die PowerShell öffnen, den Befehl zum Chocolatey-Start ausführen. Und dann einen weiteren Befehl mit einem Parameter ausführen und dann dessen Ausgabe einlesen.
Habe bei meiner Recherche folgende Funktion gefunden:

 
std::string exec(const char* cmd) {
    std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while (!feof(pipe.get())) {
        if (fgets(buffer, 128, pipe.get()) != NULL)
            result += buffer;
    }
    return result;
}



Diese Funkion öffnet die cmd und wird dann die Ausgabe eines Befehles auslesen.
(Soviel wurde mir aus der Fragestellung auf Stackoverflow klar).

Ich stelle die Frage nun nicht gerne, aber kann mir jemand die Eckpunkte, bzw. wichtigsten calls erklären? :(

 std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose); 


 fgets(buffer, 128, pipe.get()) != NULL) 


Geht mir um die beiden Zeilen. :huh:

Würde gerne verstehen wie diese Funktion abläuft/vorgeht.

Dieser Beitrag wurde von JohnnyHenver bearbeitet: 08. Dezember 2015 - 16:23

0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0