2011-07-04 10 views
1

私はJavaの開発者ですが、C++でアプリケーションを開発する必要があります。C++のcharとString

私は、データベースからいくつかのデータを読み、この中で、それを設定する:whileループはint、この私は2番目にエラーが発生します

void DBConnect() 
{ 
    char* pdf1; 
    char* pdf2; 
    SAConnection con; 
    lines=0; 
    page[lines] = new Line(); 

    SACommand cmd(&con,"select from pdf where rownum<3 "); 
    try 
    { 
     // connect to database (Oracle in our example) 
     con.Connect("DB", "user", "password", SA_Oracle_Client); 
     // Select from our test table 
     cmd.Execute(); 
     // fetch results row by row and print results 
     page[lines]->pdf1="PDF_CM"; 
     page[lines]->pdf2="PDF_LATEST"; 
     lines++; 

     char *c1=new char(CELLSIZE); 
     char *c2=new char(CELLSIZE); 
     while(cmd.FetchNext()) 
     { 
      page[lines] = new Line(); 
      string s1=cmd.Field("org_doc").asString(); 
      string s2=cmd.Field("rev_doc").asString(); 
      size_t t1=s1.find("text1"); 
      size_t t2=s2.find("text1"); 
      s1.replace(t1,std::string("text1").length(),"text2"); 
       s2.replace(t2,std::string("text1").length(),"text2"); 
      c1=new char(s1.size()+1); 
      c2=new char(s2.size()+1); 
      std::copy(s1.begin(), s1.end(), c1); 
      std::copy(s2.begin(), s2.end(), c2); 
      c1[s1.size()]='\0'; 
      c2[s2.size()]='\0'; 


      page[lines]->pdf1 =c1; 
      page[lines]->pdf2 =c2; 
      s1.erase(); 
      s2.erase(); 
      ++lines; 

     } 
     con.Commit(); 
     con.Disconnect(); 
    } 
    catch(SAException &x) 
    { 
     try 
     { 
      con.Rollback(); 
     } 
     catch(SAException &) 
     { 
     } 
     printf("%s\n", (const char*)x.ErrText()); 
    } 
} 

struct Line{ 
    char* pdf1; 
    char* pdf2; 
    char* ident; 
    char* reportpath ; 
}; 

と、私はこの方法を持っていますライン:

string s1=cmd.Field("org_doc").asString(); 

しかし、私は、私はプラグインで働いているため、エラーが何であるかを知ることができない:(

個の
+0

ような何かを行うことができ、通常の文字として定義され、エラーがあるされている場合は...? –

+0

'新しいchar(CELLSIZE)' no –

答えて

1

SQL文字列が不審に見える、それはあなたがフィールドorg_doc(wouldnにアクセスしようとした場合、実際のSQLコマンドは、エラーになりたゼロの列を持つテーブルを返すことがあります

select * from pdf where rownum<3 

すべきではありませんその場合には存在しない)。

4

これ以外にも、これは適切なC++ではありません。これはCとC++のコードを組み合わせたものです。

char*のメンバーを適切なstd::stringに置き換えるだけでは、問題のホスト全体(例:charバッファの誤った割り当てなど)がなくなります。

つまり、最初の手順はコード全体からchar*newを削除し、std::stringと自動ストレージを代わりに使用することです。

0

SACommandのドキュメントを参照すると、SAStringとは無関係のタイプであるようです。 SACommandは、stringオブジェクトとして使用するために、基になるバッファにアクセスする必要があるMFCスタイルの文字列です。

SACharタイプは、あなたが

string s1 = cmd.Field("org_doc").AsString().GetBuffer(min_length); 
関連する問題