Pytanie odnośnie Ścieżek do plików itp.

dział ogólny

Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Corvis » wtorek, 4 listopada 2008, 13:15

Witam,

mam takie pytanie z komponentu TSavePictureDialog otrzymuję scieżkę do pliku :

Kod: Zaznacz cały
\\\\gw\\schematy\\Elektronika\\Testowe\\beztytułu.bmp


przerabiam to sobie na zapytanie do bazy :

Kod: Zaznacz cały
update tech_ko_pozostale set schemat='\\\\gw\\schematy\\Elektronika\\Testowe\\beztytułu.bmp' where id_numeru_ko = (select id_numeru_ko from tech_numery_ko where id_numeru_planu=363 and numer_operacji='O1')



i jeżeli puszczam te zapytanie przez SQLQuery otrzymuje taki wynik ( dla pola schemat ) :

Kod: Zaznacz cały
\gwschematyElektronikaTestoweeztytułu.bmp


jeżeli puszczam to przez konsole otrzymuje taki :

Kod: Zaznacz cały
\\gw\schematy\Elektronika\Testowe\beztytuu.bmp

Może mi ktoś powiedzieć czemu sie tak dzieje wydaje mi się, że odpowiednia ilość ukośników jest ;/


Pozdrawiam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Cyfrowy Baron » wtorek, 4 listopada 2008, 16:00

Najwyraźniej jednak brakuje ukośników.
Zasada jest taka, jeżeli w kodzie programu chcesz umieścić w łańcuchu znaków ukośnik, to zawsze musisz go poprzedzić drugim ukośnikiem, czyli dla zapisu:

\ - \\
\\ - \\\\
\\\\ - \\\\\\\\

zastosuj tą zasadę, a wszystko powinno grać.

Inna sprawa to wysłanie zapytania, być może trzeba je umieścić w cudzysłowie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Corvis » środa, 5 listopada 2008, 08:29

to rozumiem, że jak ścieżkę otrzymuję przez OpenPictureDialog :

Kod: Zaznacz cały
fileDir=OpenPictureDialog1->FileName;


to muszę ją sprawdzić i dopisać ukośniki ??
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Cyfrowy Baron » środa, 5 listopada 2008, 09:03

Jeżeli masz jakąś wartość w zmiennej typu AnsiString to możesz z nią zrobić co tylko chcesz. Zanim zaczniesz manipulować na tej zmiennej, to najpierw sprawdź co ona zawiera wyświetlając ją np. w Label. Popatrz jakie operacje można wykonywać na zmiennych AnisString w serwisie Cyfrowy Baron w dziale: Łańcuchy znaków.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Corvis » środa, 5 listopada 2008, 10:08

Ok dzieki wielkie :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Corvis » środa, 5 listopada 2008, 10:50

No i mam dziwną sprawę :

zmienna g ma wartosc :
Kod: Zaznacz cały
{ "\\\\gw\\Schematy\\Elektronika\\Testowe\\beztytułu.bmp" }

wykonuję instrukcje wstawienia na zerową pozycję jednego \ czyli :
Kod: Zaznacz cały
Insert("\\",0);


i otrzymuję zły wynik :

Kod: Zaznacz cały
{ "\\\\\\gw\\Schematy\\Elektronika\\Testowe\\beztytułu.bmp" }


o jeden \ za dużo :\ i nie kumam tego bardzo bo jeden \ to "\\"
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Cyfrowy Baron » środa, 5 listopada 2008, 11:57

Poprzedzanie ukośnika innym ukośnikiem dotyczy tylko wartości przechowywanych w zmiennej, a nie wstawianych bezpośrednio, czyli powinno być:

Kod: Zaznacz cały
  String g = "\\\\gw\\Schematy\\Elektronika\\Testowe\\beztytułu.bmp";
  String path;
  path = g.insert("\\", 0); // wynik: \\\gw\Schematy\Elektronika\Testowe\beztytułu.bmp


Jeżeli jednak użyjesz zmiennej to otrzymasz nieprawidłowy wynik:

Kod: Zaznacz cały
  String g = "\\\\gw\\Schematy\\Elektronika\\Testowe\\beztytułu.bmp";
  String path;

  String x = "\\"; // <-- ta zmienne przekazuje w dalszej części nieprawidłowe wartości:

  path = g.insert(x, 0); // wynik: \\\\gw\Schematy\Elektronika\Testowe\beztytułu.bmp


jak widać przekazanie wartości x wstawia nie jeden ukośnik lecz dwa nie można jednak tutaj zmiennej x wprowadzić pojedynczego ukośnika gdyż zmienne tego nie przyjmie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Corvis » środa, 5 listopada 2008, 12:02

Sprawdzałem też i te sposoby wcześniej :

1 ) nie kompiluje się wogóle

[BCC32 Error] f_tech_ko_edit.cpp(1092): E2380 Unterminated string or character constant


2) daje zły wynik bo daje 6 ukośników zamiast 5
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Cyfrowy Baron » środa, 5 listopada 2008, 12:11

Poprzedzanie ukośnika innym ukośnikiem dotyczy tylko wartości przechowywanych w zmiennej, a nie wstawianych bezpośrednio, czyli powinno być:

Kod: Zaznacz cały
  String g = "\\\\gw\\Schematy\\Elektronika\\Testowe\\beztytułu.bmp";
  String path;
  path = g.insert("\\", 0); // wynik: \\\gw\Schematy\Elektronika\Testowe\beztytułu.bmp


Jeżeli jednak użyjesz zmiennej to otrzymasz nieprawidłowy wynik:

Kod: Zaznacz cały
  String g = "\\\\gw\\Schematy\\Elektronika\\Testowe\\beztytułu.bmp";
  String path;

  String x = "\\"; // <-- ta zmienne przekazuje w dalszej części nieprawidłowe wartości:

  path = g.insert(x, 0); // wynik: \\\\gw\Schematy\Elektronika\Testowe\beztytułu.bmp


jak widać przekazanie wartości x wstawia nie jeden ukośnik lecz dwa nie można jednak tutaj zmiennej x wprowadzić pojedynczego ukośnika gdyż zmienne tego nie przyjmie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Witold » środa, 5 listopada 2008, 12:55

Cyfrowy Baron napisał(a):jak widać przekazanie wartości x wstawia nie jeden ukośnik lecz dwa nie można jednak tutaj zmiennej x wprowadzić pojedynczego ukośnika gdyż zmienne tego nie przyjmie.


Dziwne, u mnie wstawia jeden.
Kod: Zaznacz cały
#include <cassert>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   String test1 = "test", test2 = test1;

   String wynik1, wynik2;
   String x = "\\";

   wynik1 = test1.Insert(x, 1);
   wynik2 = test2.Insert("\\", 1);

   assert( wynik1 == wynik2);
   Label1->Caption = wynik1;
   Label2->Caption = wynik2;
}


Corvis: może SQL interpretuje na swój sposób znak \.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Cyfrowy Baron » środa, 5 listopada 2008, 14:46

To prawdopodobnie bierze się z różnic w bibliotekach obsługujących typ AnsiString. Ja korzystam z BDS 2006 C++ Builder 10, więc są to nowsze biblioteki w stosunku do C++ Builder 6.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Corvis » czwartek, 6 listopada 2008, 10:13

Szczerzę już trochę zgłupisałem buduję zapytanie w taki sposób :

Kod: Zaznacz cały
String path=OpenPictureDialog->FileName;
String SQL;
SQL.printf("update tech_ko_pozostale set schemat='%s' where id_numeru_ko = (select id_numeru_ko from tech_numery_ko where id_numeru_planu=%d and numer_operacji='%s')",path,MAIN_id_numeru_planu,MAIN_operation_number);


i otrzymuję :

Kod: Zaznacz cały
update tech_ko_pozostale set schemat='\\\\gw\\Schematy\\Elektronika\\Nowy folder\\beztytułu.bmp' where id_numeru_ko = (select id_numeru_ko from tech_numery_ko where id_numeru_planu=409 and numer_operacji='Op1');


1.wysyłam je z konsoli MySQL -> działa jest tak jak powinno być,
2.wysyłam je z komponenetu TSQLQuery podczas tworzenia programu czyli w inspektorze dodaje SQL robie Active na true sprawdzam w bazie jest OK
3.wysyłam z kodu poprzez TSQLQuery i guzik. ( przez CommandText i przez SQL ) wygląda to tak :

Kod: Zaznacz cały
DataModuleMAIN->wykonajZapytanieSQL(SQL);


a funkcja wygląda tak :

Kod: Zaznacz cały
void  TDataModuleMAIN::wykonajZapytanieSQL(String SQL)
{
   SQLCONNECTIONMAIN->Open();
   SQLQUERYMAIN->Close();
//   SQLQUERYMAIN->CommandText=SQL; < -- tak też sprawdzałem
   SQLQUERYMAIN->SQL->Clear();
   SQLQUERYMAIN->SQL->Add(SQL);
   SQLQUERYMAIN->ExecSQL(true); // <--- ExecSQL bo zapytanie nie zwraca kursora
   SQLQUERYMAIN->Close();
    SQLCONNECTIONMAIN->Close();
}



Gdzieś coś się gubi ale sprawdzałem już tą funkcję co wykonuje zapytania wartosci zmiennych przed przypisaniem po przypisaniu ( przed wysłaniem zapytania do wykonania ) i wszystko jest ok jednak wynik nie jest prawidłowy. Chyba spróbuje to zrobić na SQLDataSecie
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Witold » czwartek, 6 listopada 2008, 10:58

Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Corvis » czwartek, 6 listopada 2008, 11:55

No tak i pisałem, że konsolka łapie taką formę zapisu :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Pytanie odnośnie Ścieżek do plików itp.

Nowy postprzez Witold » czwartek, 6 listopada 2008, 12:18

Corvis napisał(a):No tak i pisałem, że konsolka łapie taką formę zapisu :)

Czy wysyłasz zapytanie z BCB do mySql przez "konsolkę"?

Jeśli to nie to, to występuje zastanawiająca zbieżność:

wejście:
\\gw\schematy\Elektronika\Testowe\beztytułu.bmp

wyjście:
\gwschematyElektronikaTestoweeztytułu.bmp

1. pojedyncze \ znikneły
2. podwójny \ zmienił się w pojedynczy.
3. \b zmieniło się w  [kod 8] (backspace)

Zupełnie jak w instrukcji. To na pewno przypadek ? :o
Ostatnio edytowano czwartek, 6 listopada 2008, 12:35 przez Witold, łącznie edytowano 1 raz
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron