2018-12-26
2018-04-03
2017-11-24
2017-11-03
2015-09-14
2015-09-13
2015-07-19
2015-02-23
2015-01-03
2015-01-02
2014-03-09
2012-06-24
2011-04-29
2011-04-10
2010-10-20
2010-03-01
2009-07-21
2009-05-25
2009-05-23
2009-04-27
2009-04-01
2009-02-24
2009-02-20
2009-02-15
2009-02-06
2009-01-27
2009-01-26
2009-01-18
2009-01-13
2009-01-09
2009-01-01
2008-12-23
2008-12-13
2008-11-17
2008-11-03
2008-11-02
2008-10-30
2008-09-03
//前のレコードと社員情報が一致しない場合にTrueを返すCrystal構文
WhilePrintingRecords;
//<前方>社員情報が存在しない? and <後方>社員情報が一致しない?
// しない/false and ×(評価できない) false
// する/true and する/false false
// する/true and しない/true true
(PreviousIsNull({社員情報}) = false) and ({社員情報} <> Previous({社員情報}));
//次のレコードと社員情報が一致しない場合にTrueを返すCrystal構文
WhilePrintingRecords;
//<前方>社員情報が存在しない? and <後方>社員情報が一致しない?
// しない/false and ×(評価できない) false
// する/true and する/false false
// する/true and しない/true true
(NextIsNull({社員情報}) = false) and ({社員情報} <> Next({社員情報}));
//最初のレコードのとき変数cntを0で初期化する。
//そうでない場合、cntをインクリメントする。
numberVar cnt;
if OnFirstRecord then cnt := 0 else cnt := cnt+1;
//WhilePrintingReportsは必要ない
Count({個人.名前})
@レコードカウンターのリセット//非表示にしておく。
WhilePrintingRecords;
numberVar RecordCounter:=0;
//詳細に以下の式フィールドを挿入
@レコードカウンター //非表示に・・・せんでもいいのかな。
WhilePrintingRecords;
numberVar RecordCounter;
RecordCounter := RecordCounter + 1;
WhilePrintingRecords;
numberVar displayCount := 50; // 50件表示
Remainder(RecordNumber,displayCount) = 0 and RecordNumber <> @総レコード数;
WhilePrintingRecords;
{グループで利用しているフィールド}=Previous({グループで利用しているフィールド})
WhilePrintingRecords;
{グループで利用しているフィールド}=Next({グループで利用しているフィールド})
WhilePrintingRecords;
OnLastRecord <> true;
WhileReadingRecords;
// パラメーターフィールド"入力データ"の値が1であるとき、カラムAでグループ化します。それ以外のときはグループ化しません。
If {?入力データ} = 1 Then {テーブル.カラムA} Else ""
//@グループ内件数
Count({※1},{※2});
//※1 カウント対象のフィールド名、今回は単にレコードの件数を確認したいのでどのフィールドが対象でもかまわない。
//※2 グループ化するフィールド名
WhilePrintingRecords;
(PageNumber = 1)
or
(PageNumber = TotalPageCount);
//ページヘッダーに以下の式フィールドを挿入
@合計のリセット//非表示にしておく。
WhilePrintingRecords;
numberVar ToltalValue:=0;
//詳細に以下の式フィールドを挿入(合計をカウントする場所なので詳細とは限らない)
@合計のカウント//非表示にしておく。
WhilePrintingRecords;
numberVar ToltalValue;
ToltalValue := ToltalValue +{値}
//ページフッターに以下の式フィールドを挿入
@合計の出力
WhilePrintingRecords;
numberVar ToltalValue;
WhilePrintingRecords;
PageNumber <> TotalPageCount;
// @行数の初期化 ページヘッダーに挿入する
WhilePrintingRecords;
numberVar line := 0;
// @行数のカウント 詳細に挿入する
WhilePrintingRecords;
numberVar line;
line := line + 1;
// 改ページ条件 詳細の「出力後に改ページ」の条件式に記述する
WhilePrintingRecords;
numberVar line;
line = X // Xは表示したい行数
WhilePrintingRecords;
"文字列の" + "連結";
// 文字列の連結
Replace("abcabcabc", "b", "a");
// aacaacaac
// 変換を複数回行いたい場合は一度変数に格納する方が無難である。
stringVar str;
str := Replace("abcabcabc", "b", "a");
// aacaacaac
Replace(str, "c", " a");
// aaaaaaaaa
//10桁になるまで0を埋め込みたい
//左側に埋め込む
stringVar str;
str := "123";
Right("0000000000" & str, 10);
//0000000123
//右側に埋め込む
Left(str & "0000000000", 10);
//1230000000
WhilePrintingRecords;
stringVar str;
numberVar num;
str := "文字列";
num := 123;
// "文字列" と 数値123を文字列に変換して連結する
str := str + ToText(num);
// "文字列123"
WhilePrintingRecords;
stringVar str;
numberVar num;
num := 123;
// 小数点以下を表示しない
str := CStr(num, 0);
Round(1.23456)
//1 を返す
//2番目の引数を指定した場合、指定した桁数で丸め込まれる。
Round(1.23456, 2)
//1.23 を返す。
Remainder(12,5)
//2 を返す。
Remainder(16,5)
//1 を返す。
numberVar num := 0;
WhilePrintingRecords;
//指定したフィールドの値が0なら小数点以下桁数を表示しない、0以外なら第2位まで表示
if {フィールド名} = 0 then 0 else 2;
///////////////////////////////
WhilePrintingRecords;
//指定したフィールドの値が小数点以下の値を含まないなら小数点以下を表示しない、含むなら第2位まで表示
if ({フィールド名} - RoundUp({フィールド名}, 0)) = 0 then 0 else 2;
@10文字単位で改行するフィールド
WhilePrintingRecords;
stringVar str;
stringVar res;
numberVar i;
str := {文字列};
// 対象の文字列から1文字づつ抽出する。
for i := 1 to Length(str) step 1 do(
res := res + str[i];
// 10文字単位で改行コード(chr(13) + chr(10))を埋め込む。
if Remainder(i,10) = 0 then res := res + chr(13) + chr(10) else res;
);
stringVar res;
WhilePrintingRecords;
If Isnull({フィールド}) = true then
// 復帰文字(\r)に置き換える
chr(13)
else
{フィールド}
//reportはレポートのインスタンス
//VB.NET
Dim intPages As Integer
'CrystalReportが返す全ページ数を得る
intPages = report.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext)
//C#.NET
CrystalDecisions.Shared.ReportPageRequestContext req =
new CrystalDecisions.Shared.ReportPageRequestContext();
int intPages = report.FormatEngine.GetLastPageNumber(req);
CrystalDecisions.CrystalReports.Engine.TextObject txtObj;
txtObj=rptObj.ReportDefinition.ReportObjects["フィールドオブジェクト名"] as CrystalDecisions.CrystalReports.Engine.TextObject;
txtObj.Text = "なんちゃらかんちゃら";
//reportはレポート名
report.DataDefinition.FormulaFields.Item("式フィールド名").Text = "'なんちゃらかんちゃら'"
//''で囲っていることに注意
//"なんちゃらかんちゃら"ではエラーとなる。
//数値の場合はそのままで大丈夫。
CrystalDecisions.CrystalReports.Engine.FormulaFieldDefinition field;
field = rptObj.ReportDefinition.ReportObjects["フィールドオブジェクト名"] as CrystalDecisions.CrystalReports.Engine.FormulaFieldDefinition;
field.Text = "なんちゃらかんちゃら";
// 条件に合致するフィールドを検索したい場合、以下のようにしてもOKよ。
foreach(CrystalDecisions.CrystalReports.Engine.FormulaFieldDefinition field in rptObj.DataDefinition.FormulaFields)
{
if(field.ValueType == CrystalDecisions.Shared.FieldValueType.StringField)
{
System.Console.Writeline(field.Text);
}
}
//@フラグ
1
//@動的グループ
WhileReadingRecords; //←WhilePrintingRecordsでないことに注意
if {@フラグ} = 1 then
{名前}
else
{住所}
//@フラグ
1
//@日付によるグループ
WhileReadingRecords; //←WhilePrintingRecordsでないことに注意
if {@フラグ} = 1 then
{名前}
else
''
// rptObjはレポートオブジェクト
rptObj.SetParameterValue("レポートタイトル", "クリレポチップス集");
// rptはレポートドキュメントオブジェクト
SubreportObject subRptObj;
subRptObj = rpt.ReportDefinition.ReportObjects["SubReport1"] as SubreportObject;
ReportDocument subRpt = subRptObj.OpenSubreport(subRptObj.SubreportName);
//又は以下のようにする。こっちの方がスマート
SubreportObject subRptObj;
subRptObj = rp.ReportDefinition.ReportObjects("SubReport1")
CrystalDecisions.CrystalReports.Engine.ReportDocument report;
//絶対パスが無難
string path = Application.StartupPath + @"\report.rpt";
report.Load(path);
//"ユーザ名,パスワード,サーバー名,データベース名の順
report.SetDatabaseLogon( "oraUser","oraPassword","oraSever","" );
report.Database.Tables[0].Location = "oraUser" + "." + report.Database.Tables[0].Location;
CrystalDecisions.CrystalReports.Engine.ReportDocument report;
//絶対パスが無難
string path = Application.StartupPath + @"\report.rpt";
report.Load(path);
TableLogOnInfo logOnInfo = new TableLogOnInfo();
logOnInfo = report.Database.Tables[ "Table1" ].LogOnInfo;
ConnectionInfo connectionInfo = logOnInfo.ConnectionInfo;
connectionInfo.DatabaseName = "";
connectionInfo.ServerName = oraServer
connectionInfo.UserID = "oraUser";
connectionInfo.Password = "oraPassword";
report.Database.Tables[ "Table1" ].ApplyLogOnInfo( logOnInfo );
CrystalDecisions.CrystalReports.Engine.ReportDocument report;
//絶対パスが無難
string path = Application.StartupPath + @"\report.rpt";
report.Load(path);
report.DataSourceConnections[0].SetConnection( "oraServer", "","oraUser", "oraPassword" );
//表示する必要がないので非表示にしておく
WhilePrintingRecords;
ToText(TotalPageCount,0);
foreach (Control obj in crystalReportViewer1.Controls)
{
if (obj.GetType().Name == "PageView")
{
foreach (Control obj2 in obj.Controls)
{
if (obj2.GetType().Name == "TabControl")
{
((TabControl)obj2).TabPages[0].Text = "変更後名";
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
List lbls = new List();
// コントロールオブジェクトに分解
foreach (Control ctl in crystalReportViewer1.Controls)
{
// ツールバーを取得
if (ctl.GetType().Equals(typeof(System.Windows.Forms.ToolStrip)))
{
System.Windows.Forms.ToolStrip strip = (System.Windows.Forms.ToolStrip)ctl;
// ツールバーをアイテムに分解
foreach (ToolStripItem item in strip.Items)
{
// ラベルを取得
if (item.GetType().Equals(typeof(System.Windows.Forms.ToolStripLabel)))
{
lbls.Add(item);
}
}
}
}
Bitmap bmp = new Bitmap("logo.jpg");
lbls[1].BackgroundImage = bmp; // ラベルは2個あってそのうちの2番目がロゴを表示しているラベルです。
//lbls[1].Visible = false;
}
foreach (Control ctl in crystalReportViewer1.Controls)
{
CrystalDecisions.Windows.Forms.PageView pv = ctl as CrystalDecisions.Windows.Forms.PageView;
if (pv != null)
{
foreach (Control ctl2 in pv.Controls)
{
System.Windows.Forms.TabControl tabCtl = ctl2 as System.Windows.Forms.TabControl;
if (tabCtl != null)
{
foreach (Control ctl3 in tabCtl.Controls)
{
CrystalDecisions.Windows.Forms.DocumentControl dc = ctl3 as CrystalDecisions.Windows.Forms.DocumentControl;
if (dc != null)
{
dc.MouseWheel += new MouseEventHandler(dc_MouseWheel);
}
}
}
}
}
}
//1のサンプル
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(@"C:\xxx.jpg");
using (System.IO.MemoryStream st = new System.IO.MemoryStream())
{
bmp.Save(st, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = new byte[st.Length];
bytes = st.ToArray();
row["列名"] = bytes; // rowはDataRowオブジェクト
}
//2のサンプル
//rptはReportDocumentオブジェクト
rpt.DataDefinition.FormulaFields.Item("式フィールド名").Text = @"'C:\xxx.jpg'"
//3のサンプル
System.IO.File.Copy(@"C:\org.jpg", @"C:\xxx.jpg"); // 画像保存場所に"C:\xxx.jpg"を指定しておく
// C#によるサンプル
// ReaportDocumentオブジェクトの宣言
ReportFile rptObj = new ReportFile();
// ReportDocumentにデータをセット
rptObj.SetDataSource( データセット );
// プリンタの設定
CrystalDecisions.CrystalReports.Engine.PrintOptions printOptions = rptObj.PrintOptions;
// プリンタ名
printOptions.PrinterName = "EPSON ○○○";
// 用紙サイズ
printOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4;
// マージン(余白)
CrystalDecisions.Shared.PageMargins margins;
margins.leftMargin = 10;
margins.rightMargin = 10;
margins.topMargin = 20;
margins.bottomMargin = 20;
// マージンの適用
printOptions.ApplyPageMargins(margins);
// 印刷(上記設定を行わない場合、デフォルトのプリンタ及びデフォルトの設定で印刷される)
rptObj.PrintToPrinter(1, false, 0, 0);
[Visual Basic]
Private Sub PrintReport(ByVal printerName As String)
Dim margins As PageMargins
' PageMargins 構造体を取得し、
' レポートの余白を設定します。
margins = Report.PrintOptions.PageMargins
margins.bottomMargin = 350
margins.leftMargin = 350
margins.rightMargin = 350
margins.topMargin = 350
' ページ余白を適用します。
Report.PrintOptions.ApplyPageMargins(margins)
' プリンタを選択します。
Report.PrintOptions.PrinterName = printerName
' レポートを印刷します。startPageN および endPageN
' パラメータを 0 に設定し、すべてのページを印刷します。
Report.PrintToPrinter(1, False, 0, 0)
End Sub
[C#]
private void PrintReport(string printerName)
{
PageMargins margins;
// PageMargins 構造体を取得し、
// レポートの余白を設定します。
margins = Report.PrintOptions.PageMargins;
margins.bottomMargin = 350;
margins.leftMargin = 350;
margins.rightMargin = 350;
margins.topMargin = 350;
// ページ余白を適用します。
Report.PrintOptions.ApplyPageMargins(margins);
// プリンタを選択します。
Report.PrintOptions.PrinterName = printerName;
// レポートを印刷します。startPageN および endPageN
// パラメータを 0 に設定し、すべてのページを印刷します。
Report.PrintToPrinter(1, false,0,0);
}
[C++]
void PrintReport(String* printerName)
{
PageMargins margins;
// PageMargins 構造体を取得し、
// レポートの余白を設定します。
margins = Report->PrintOptions->PageMargins;
margins.bottomMargin = 350;
margins.leftMargin = 350;
margins.rightMargin = 350;
margins.topMargin = 350;
// ページ余白を適用します。
Report->PrintOptions->ApplyPageMargins(margins);
// プリンタを選択します。
Report->PrintOptions->PrinterName = printerName;
// レポートを印刷します。startPageN および endPageN
// パラメータを 0 に設定し、すべてのページを印刷します。
Report->PrintToPrinter(1, false,0,0);
};
//グループヘッダーに以下の式フィールドを挿入
@合計のリセット//非表示にしておく。
WhilePrintingRecords;
numberVar ToltalValue:=0;
//詳細に以下の式フィールドを挿入
@合計のカウント//非表示にしておく。
WhilePrintingRecords;
numberVar ToltalValue;
ToltalValue := ToltalValue +{非循環フィールド}
//グループフッターに以下の式フィールドを挿入
@合計の出力
WhilePrintingRecords;
numberVar ToltalValue;
//グループごとの積算合計を表示したい場合、以下のようにする。
//グループヘッダーに以下の式フィールドを挿入。
WhilePrintingRecords;
CurrencyVar Amount := 0;
//詳細に以下の式フィールドを挿入。
WhilePrintingRecords;
CurrencyVar Amount;
Amount := Amount +{価格}
//グループフッターに以下の式フィールドを挿入
WhilePrintingRecords;
CurrencyVar Amount;
// ページヘッダーに次のような式フィールドを挿入する。
@初期化 // 式フィールド名
numberVar count; // Globalな数値型変数countの使用を宣言する。
count := 0; // countに0を代入する。
// 詳細に次のような式フィールドを挿入する。
@インクリメント
numberVar count; // Globalな数値型変数countの使用を宣言する。
//このcountは@初期化で宣言しているcountと同一のものであり、この時点ですでにcountには0が入っている。
count := count + 1; //countに0+1(=1)を代入する。
//詳細があるたびにcountは1ずつ増え、ページヘッダーでリセットされる。
//よって、countの役割は1ページ内のレコード数をカウントすることである。
C# OracleParameterクラスを使った例
string str = "パラメータデータ";
System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand();
// 変数名"PARAM1"、データ型"VARCHAR"、サイズ"20"でOracleParameterオブジェクト"parameter"を宣言
System.Data.OracleClient.OracleParameter parameter = new System.Data.OracleClient.OracleParameter( "PARAM1", OracleType.Char, 20 );
parameter.IsNullable = true;
parameter.Value = str;
command.Parameters.Add( parameter );
// "NOT NULL"制約を解除する場合
SQL> alter table PERSON modify ADDRESS varchar(50) null;
// "NOT NULL"制約を付加する場合
SQL> alter table PERSON modify ADDRESS varchar(50) not null;
//commitを忘れずに
//C# OracleParameterクラスを使った例
string str = "パラメータデータ";
System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand();
// 変数名"PARAM1"、データ型"VARCHAR"、サイズ"20"でOracleParameterオブジェクト"parameter"を宣言
System.Data.OracleClient.OracleParameter parameter = new System.Data.OracleClient.OracleParameter( "PARAM1", OracleType.Char, 20 );
parameter.IsNullable = true;
parameter.Value = str;
command.Parameters.Add( parameter );