▼質問
構造体(struct)で作成した変数を関数に渡してその中身をその関数の中で取得して
データを取得したいんだけど・・・うまく値がセットされないんだ!?
どうしてだい?
▼回答
C#のstructは、C/C++のstructとは違うものなんだ。
C#での構造体は、値型でクラスは、参照型なんだ。
値型とは、情報を引き渡すときに情報をコピーする方式のデータ型である。
参照型とは、データの実体がある場所を保存しておき、情報を引き渡す必要がある場合は、
データの本体をコピーせず、データの場所だけを伝えるという方式である。
構造体で参照渡しをしたい時は、関数の引数と呼び出し側の引数に「ref」を付けるんだ。
public struct ユーザ定義名
{
public int num;
public string name;
}
public void Test( ref ユーザ定義名 user )
{
user.num = 1;
user.name = "テスト";
}
ユーザ定義名 getUser;
Test( ref getUser );
■参考サイト
@IT:連載 改訂版 C#入門 第5章 C#のデータ型
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_005/cs2_005_03.html
青島のしま~Blue Islands~ : .NET Tips
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_2E4E45542054697073.html
木曜日, 5月 22, 2008
水曜日, 5月 21, 2008
[C#]object型のキャスト
▼質問
次のプログラムで 「指定されたキャストは有効ではありません。」のエラーが出る。どうして?
string sql = "SELECT * FROM テーブル名";
OracleDataAdapter objAdapter;
objAdapter = new OracleDataAdapter(sql, objOraConn);
DataSet objOraDataSet;
objOraDataSet = new DataSet("objDataSet");
// Fill the DataSet
objAdapter.Fill(objOraDataSet, "テーブル名");
DataRow objRow = objOraDataSet.Tables[0].Rows[0];
int val = (int)objRow["フィールド名"]; ← ここでエラー
▼回答
次の2つを使い分けてやればOK?!
Convert.ToInt32(objRow["フィールド名"]);
((IConvertible)objRow["フィールド名"]).ToInt32(null);
■参考サイト
object型のキャストについて: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-16/9607.html
次のプログラムで 「指定されたキャストは有効ではありません。」のエラーが出る。どうして?
string sql = "SELECT * FROM テーブル名";
OracleDataAdapter objAdapter;
objAdapter = new OracleDataAdapter(sql, objOraConn);
DataSet objOraDataSet;
objOraDataSet = new DataSet("objDataSet");
// Fill the DataSet
objAdapter.Fill(objOraDataSet, "テーブル名");
DataRow objRow = objOraDataSet.Tables[0].Rows[0];
int val = (int)objRow["フィールド名"]; ← ここでエラー
▼回答
次の2つを使い分けてやればOK?!
Convert.ToInt32(objRow["フィールド名"]);
((IConvertible)objRow["フィールド名"]).ToInt32(null);
■参考サイト
object型のキャストについて: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-16/9607.html
日曜日, 5月 18, 2008
[VB→C#]My.Computer.FileSystem関連
▼質問
「My.Computer.FileSystem」関連の処理をVBからC#に移植しようと思うんだが・・・。
うまくいかないんだ。
▼回答
「My.Computer.FileSystem」を「Microsoft.VisualBasic.FileIO」に変換すれば問題ないよ。
名前空間のインポートに「Microsoft.VisualBasic.FileIO」を宣言すると次のエラーになる。
「エラー 1 'FileSystem' は、'Microsoft.VisualBasic.FileIO.FileSystem' と 'Microsoft.VisualBasic.FileSystem'' 間のあいまいな参照です。 ファイルパス」
「'Microsoft.VisualBasic」と「Microsoft.VisualBasic.FileIO」は共存できないようだ。
そこで考えた。
名前空間のインポートに「using FileIO = Microsoft.VisualBasic.FileIO;」を宣言して、
「My.Computer」を「FileIO」に変換すれば問題ないことがわかった。
「My.Computer.FileSystem」関連の処理をVBからC#に移植しようと思うんだが・・・。
うまくいかないんだ。
▼回答
「My.Computer.FileSystem」を「Microsoft.VisualBasic.FileIO」に変換すれば問題ないよ。
名前空間のインポートに「Microsoft.VisualBasic.FileIO」を宣言すると次のエラーになる。
「エラー 1 'FileSystem' は、'Microsoft.VisualBasic.FileIO.FileSystem' と 'Microsoft.VisualBasic.FileSystem'' 間のあいまいな参照です。 ファイルパス」
「'Microsoft.VisualBasic」と「Microsoft.VisualBasic.FileIO」は共存できないようだ。
そこで考えた。
名前空間のインポートに「using FileIO = Microsoft.VisualBasic.FileIO;」を宣言して、
「My.Computer」を「FileIO」に変換すれば問題ないことがわかった。
土曜日, 5月 17, 2008
[VB→C#]INIファイル関連(WIN32API)
▼質問
INIファイル関連の関数宣言を教えてくれ!
▼回答
サンプルを示しておくから参考にしてくれ!!
[VB]
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileString" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As StringBuilder, _
ByVal nSize As UInt32, _
ByVal lpFileName As String) As UInt32
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileInt Lib "kernel32" _
Alias "GetPrivateProfileInt" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal intDefault As Integer, _
ByVal lpFileName As String) As UInt32
' INIファイルに値を設定する関数の宣言
Public Declare Auto Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileString" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As UInt32
[C#]
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileString(
string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
uint nSize,
string lpFileName);
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileInt(
string lpAppName,
string lpKeyName,
int nDefault,
string lpFileName);
// INIファイルに値を設定する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpString,
string lpFileName);
INIファイル関連の関数宣言を教えてくれ!
▼回答
サンプルを示しておくから参考にしてくれ!!
[VB]
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileString" ( _
ByVal nSize As UInt32, _
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileInt Lib "kernel32" _
Alias "GetPrivateProfileInt" ( _
' INIファイルに値を設定する関数の宣言
Public Declare Auto Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileString" ( _
[C#]
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileString(
string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
uint nSize,
string lpFileName);
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileInt(
string lpAppName,
string lpKeyName,
int nDefault,
string lpFileName);
// INIファイルに値を設定する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpString,
string lpFileName);
[C#]VBからの移植でのエラー
▼質問
VBからC#に移植しているんだけど。
次のコードで、次のエラーが出るんだ。どういう意味なのかな?
DataSet objDataSet = new DataSet("objDataSet");
~ 略 ~
DataRow objRow = objDataSetOra.Tables(0).Rows(0);
「エラー 1 'System.Data.DataSet.Tables' は 'プロパティ' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
VBとC#で配列の文法が違うから気を付けた方がいいよ。
DataRow objRow = objDataSetOra.Tables[0].Rows[0];
▼質問
次のエラーが出るんだ。
「エラー 1 'objRow' は '変数' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
これも、上記の回答と同じだよ。
VBからC#に移植しているんだけど。
次のコードで、次のエラーが出るんだ。どういう意味なのかな?
DataSet objDataSet = new DataSet("objDataSet");
~ 略 ~
DataRow objRow = objDataSetOra.Tables(0).Rows(0);
「エラー 1 'System.Data.DataSet.Tables' は 'プロパティ' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
VBとC#で配列の文法が違うから気を付けた方がいいよ。
DataRow objRow = objDataSetOra.Tables[0].Rows[0];
▼質問
次のエラーが出るんだ。
「エラー 1 'objRow' は '変数' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
これも、上記の回答と同じだよ。
[C#]型変換(キャスト)
▼質問
次のプログラムで
public string cnvString(double data) {
return data.ToString();
}
下記のエラーになるんだ。どうしてなんだ?
「エラー 1 メソッド グループ 'ToString' を非デリゲート型 'string' に変換することはできません。このメソッドを呼び出すことはできません。 ファイルパス」
次の様にするとエラーは出なくなるんだ。何か違う気がする・・・。
public string cnvString(double data) {
string s = data.ToString();
return s;
}
▼回答
VBやC言語で言う共通関数(値を渡して結果を返すだけの処理)のようなものならstaticを
付けてあげれば問題ないと思うよ。
public static string cnvString(double data) {
return data.ToString();
}
静的変数・静的メソッドはクラスごとに唯一つの実体を持ち、すべてのオブジェクトの間で共有される。
また、数学関数や数学定数などのインスタンスを持つ必要のない関数を定義する場合にも使う。
クラス内に処理実態とデータが含む場合はstaticにしてはいけない。
■参考サイト
静的変数・静的メソッド(C# によるプログラミング入門)
http://ufcpp.net/study/csharp/oo_static.html
次のプログラムで
public string cnvString(double data) {
return data.ToString();
}
下記のエラーになるんだ。どうしてなんだ?
「エラー 1 メソッド グループ 'ToString' を非デリゲート型 'string' に変換することはできません。このメソッドを呼び出すことはできません。 ファイルパス」
次の様にするとエラーは出なくなるんだ。何か違う気がする・・・。
public string cnvString(double data) {
string s = data.ToString();
return s;
}
▼回答
VBやC言語で言う共通関数(値を渡して結果を返すだけの処理)のようなものならstaticを
付けてあげれば問題ないと思うよ。
public static string cnvString(double data) {
return data.ToString();
}
静的変数・静的メソッドはクラスごとに唯一つの実体を持ち、すべてのオブジェクトの間で共有される。
また、数学関数や数学定数などのインスタンスを持つ必要のない関数を定義する場合にも使う。
クラス内に処理実態とデータが含む場合はstaticにしてはいけない。
■参考サイト
静的変数・静的メソッド(C# によるプログラミング入門)
http://ufcpp.net/study/csharp/oo_static.html
金曜日, 5月 16, 2008
[C#]Oracle参照エラー
▼質問
下記のエラーが出るんだ。どうしたらいいんだ?!
「エラー 1 型または名前空間名 'Oracle' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 ファイルパス」
▼回答
ソリューション エクスプローラの参照設定から次の手順で設定するんだ。
参照設定を選択し、プロパティウィンドウ(右クリック)から「参照の追加」を選択するんだ。
「.NET」タブからコンポーネント名「Oracle.DataAccess」を選んで「OK」をクリックして終了だ。
ODP.NETのインストールとバージョンに注意してくれ!
■参考サイト
Oracle 散策
http://www.okisoft.co.jp/esc/db/ora04.html
下記のエラーが出るんだ。どうしたらいいんだ?!
「エラー 1 型または名前空間名 'Oracle' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 ファイルパス」
▼回答
ソリューション エクスプローラの参照設定から次の手順で設定するんだ。
参照設定を選択し、プロパティウィンドウ(右クリック)から「参照の追加」を選択するんだ。
「.NET」タブからコンポーネント名「Oracle.DataAccess」を選んで「OK」をクリックして終了だ。
ODP.NETのインストールとバージョンに注意してくれ!
■参考サイト
Oracle 散策
http://www.okisoft.co.jp/esc/db/ora04.html
[C#]デファイン or インクルード
▼質問
デファイン(#define)を定義するインクルードファイル(ヘッダファイル)ってないの?
▼回答
C#には、拡張子が(.h)のようなヘッダファイル(インクルード)は存在しないよ。
■参考サイト
C# 言語と .NET Framework の概要
http://msdn.microsoft.com/ja-jp/library/z1zx9t92(VS.80).aspx
デファイン(#define)を定義するインクルードファイル(ヘッダファイル)ってないの?
▼回答
C#には、拡張子が(.h)のようなヘッダファイル(インクルード)は存在しないよ。
■参考サイト
C# 言語と .NET Framework の概要
http://msdn.microsoft.com/ja-jp/library/z1zx9t92(VS.80).aspx
[C#]C#の日付型
▼質問
C#にDate型はないの?
▼回答
Date型はないけど日付型を扱うにはSystem名前空間にあるDateTime型を使うんだ。
使用方法には、次に上げる2通りがあるぞ!
プログラムの最初で「using System;」と宣言する方法と、
プログラムの中で「System.DateTime」とする方法だ。
前者の方が、プログラムがスッキリして一般的に使われる
方法だと思うから、その方法をお勧めするよ!
C#にDate型はないの?
▼回答
Date型はないけど日付型を扱うにはSystem名前空間にあるDateTime型を使うんだ。
使用方法には、次に上げる2通りがあるぞ!
プログラムの最初で「using System;」と宣言する方法と、
プログラムの中で「System.DateTime」とする方法だ。
前者の方が、プログラムがスッキリして一般的に使われる
方法だと思うから、その方法をお勧めするよ!
木曜日, 5月 15, 2008
[C#]VBからC#への移植方法
■VBからC#への移植方法
1.「’(シングルコーテイション)」を置換で「//(ダブルスラッシュ)」にする。
2.「Imports」を「using」に変換し、行の最後に「;(セミコロン)」を付ける。
3.「Public」を「public」に「Private」を「private」に置換する。
4.「Public Class クラス名 ~ End Class」を「public class クラス名 { ~ }」にする。
5.「Public Enum 列挙名 ~ End Enum」を「public enum 列挙名 { ~ }」にし、列挙子の間を
「,(カンマ)」で区切る。
6.「Public Structure 構造体名 ~ End Structure」を「public struct 構造体名 { ~ }」にし、
メンバの型を次の様に変換する。
Public 変数名 As Integer → public int 変数名;
Public 変数名 As String → public string 変数名;
Public 変数名 As Long → public long 変数名;
Public 変数名 As Double → public double 変数名;
Public 変数名 As Boolean → public bool 変数名;
Public 変数名 As Date → public System.DateTime 変数名;
7.コンストラクタ「Sub New() ~ End Sub」を「public クラス名() { ~ }」にする。
8.下記の様に置換する。
「New」 → 「new」
「True」 → 「true」
「False」 → 「false」
「.ToString」 → 「.ToString()」
「Try ~ Catch ex As Exception ~ Finally ~ End Try」 →
「try { ~ } catch (Exception ex) { ~ } finally { ~ }」
※注意:using Systemが必要!
「GoTo」 → 「goto」
「Nothing」 → 「null」
9.「IsDBNull」関数を下記に置き換え実装する。
public static bool IsDBNull(object data)
{
これよくなかった!
if (data == null) return true;
return false;
return Microsoft.VisualBasic.Information.IsDBNull(data);
}
10.「Format」関数を下記に置き換え実装する。
public static string Format(object data, string format)
{
これ間違えだった!
return String.Format(format, data);
return Microsoft.VisualBasic.Strings.Format(data, format);
}
11.配列宣言の型を次の様に変換する。
「Dim val(2) As Integer」 → 「int[] val = new int[2];」
12.「Select Case 」文を次の様に変換する。
Select Case 変数名
Case 値
Case Else
End Select
switch ( 変数名 ) {
case 値:
default:
}
13.「For」文を次の様に変換する。
For i as Integer = 0 To 10
Next i
for ( int i = 0 ; i <= 10 ; i++ ) { } 14.「& _」を使った文字列の連結を「+」に変換する。 15.下記に示すものを削除し、プログラムの処理を変更する。 「On Error GoTo」 16.「Err.Number」を「Microsoft.VisualBasic.Information.Err().Number」とするか次の様にする。 ソリューション エクスプローラの参照設定から「参照の追加」より「Microsoft.VisualBasic」を 追加し、「Err.Number」を「Information.Err().Number」とする。 このやり方ではエラーの取得は駄目みたい(>_<)
17.定数宣言を次の様に変更する。
「Public Const 定数名 As Integer = 0」 → 「public const int 定数名 = 0」
18.VB定数を次の様に変更する。
「Chr(13)」 or 「vbCr」 → 「\r」 : キャリッジリターン文字
「Chr(10)」 or 「vbLf」 → 「\n」 : ラインフィード文字
「Chr(13) + Chr(10)」 or 「vbCrLf」 or 「vbNewLine」 → 「\r\n」 : キャリッジリターンとラインフィードの組合せ
「Chr(9)」 or 「vbTab」 → 「\t」 : タブ文字
「Chr(0)」 or 「vbNullChar」 or 「vbNullString」 → 「\0」 : 値 0 を持つ文字
「Chr(8)」 or 「vbBack」 → 「\b」 : バックスペース文字
1.「’(シングルコーテイション)」を置換で「//(ダブルスラッシュ)」にする。
2.「Imports」を「using」に変換し、行の最後に「;(セミコロン)」を付ける。
3.「Public」を「public」に「Private」を「private」に置換する。
4.「Public Class クラス名 ~ End Class」を「public class クラス名 { ~ }」にする。
5.「Public Enum 列挙名 ~ End Enum」を「public enum 列挙名 { ~ }」にし、列挙子の間を
「,(カンマ)」で区切る。
6.「Public Structure 構造体名 ~ End Structure」を「public struct 構造体名 { ~ }」にし、
メンバの型を次の様に変換する。
Public 変数名 As Integer → public int 変数名;
Public 変数名 As String → public string 変数名;
Public 変数名 As Long → public long 変数名;
Public 変数名 As Double → public double 変数名;
Public 変数名 As Boolean → public bool 変数名;
Public 変数名 As Date → public System.DateTime 変数名;
7.コンストラクタ「Sub New() ~ End Sub」を「public クラス名() { ~ }」にする。
8.下記の様に置換する。
「New」 → 「new」
「True」 → 「true」
「False」 → 「false」
「.ToString」 → 「.ToString()」
「Try ~ Catch ex As Exception ~ Finally ~ End Try」 →
「try { ~ } catch (Exception ex) { ~ } finally { ~ }」
※注意:using Systemが必要!
「GoTo」 → 「goto」
「Nothing」 → 「null」
9.「IsDBNull」関数を下記に置き換え実装する。
public static bool IsDBNull(object data)
{
これよくなかった!
if (data == null) return true;
return false;
return Microsoft.VisualBasic.Information.IsDBNull(data);
}
10.「Format」関数を下記に置き換え実装する。
public static string Format(object data, string format)
{
これ間違えだった!
return String.Format(format, data);
return Microsoft.VisualBasic.Strings.Format(data, format);
}
11.配列宣言の型を次の様に変換する。
「Dim val(2) As Integer」 → 「int[] val = new int[2];」
12.「Select Case 」文を次の様に変換する。
Select Case 変数名
Case 値
Case Else
End Select
switch ( 変数名 ) {
case 値:
default:
}
13.「For」文を次の様に変換する。
For i as Integer = 0 To 10
Next i
for ( int i = 0 ; i <= 10 ; i++ ) { } 14.「& _」を使った文字列の連結を「+」に変換する。 15.下記に示すものを削除し、プログラムの処理を変更する。 「On Error GoTo」 16.「Err.Number」を「Microsoft.VisualBasic.Information.Err().Number」とするか次の様にする。 ソリューション エクスプローラの参照設定から「参照の追加」より「Microsoft.VisualBasic」を 追加し、「Err.Number」を「Information.Err().Number」とする。 このやり方ではエラーの取得は駄目みたい(>_<)
17.定数宣言を次の様に変更する。
「Public Const 定数名 As Integer = 0」 → 「public const int 定数名 = 0」
18.VB定数を次の様に変更する。
「Chr(13)」 or 「vbCr」 → 「\r」 : キャリッジリターン文字
「Chr(10)」 or 「vbLf」 → 「\n」 : ラインフィード文字
「Chr(13) + Chr(10)」 or 「vbCrLf」 or 「vbNewLine」 → 「\r\n」 : キャリッジリターンとラインフィードの組合せ
「Chr(9)」 or 「vbTab」 → 「\t」 : タブ文字
「Chr(0)」 or 「vbNullChar」 or 「vbNullString」 → 「\0」 : 値 0 を持つ文字
「Chr(8)」 or 「vbBack」 → 「\b」 : バックスペース文字
土曜日, 5月 10, 2008
[VB2005]コントロールを名前で探す
▼質問
コントロールを名前で探すにはどうしたらいいんだい。
▼回答
次の様にすれば直接コントロールを操作できるようになるよ。
CType(Me.Controls.Find(名前, True)(0), コントロール名)
■参考サイト
VB.NET - フォーム内のコントロールを名前で探して取得する
http://jeanne.wankuma.com/tips/vb.net/form/findcontrol.html
コントロールを名前で探すにはどうしたらいいんだい。
▼回答
次の様にすれば直接コントロールを操作できるようになるよ。
CType(Me.Controls.Find(名前, True)(0), コントロール名)
■参考サイト
VB.NET - フォーム内のコントロールを名前で探して取得する
http://jeanne.wankuma.com/tips/vb.net/form/findcontrol.html
金曜日, 5月 09, 2008
[VB2005]別ウィンドウ(別EXE)の最前面表示
▼質問
別ウィンドウ(別EXE)で起動したアプリを最前面に表示したいんだ。どうしたらよいのか?
▼回答
次のAPIを使えばできるぞ!
API名は『BringWindowToTop』だ。
次にサンプルを示しておくから参考にしてくれ!!
'ウィンドウを最前面に表示する関数宣言
Declare Function BringWindowToTop Lib "user32.dll" Alias "BringWindowToTop" (ByVal hWnd As Int32) As Int32
'最上位フォーム設定解除
Me.TopMost = False
'プロセスを起動する.
prs = Process.Start(起動EXEパス, パラメータ)
'最上位フォーム設定
BringWindowToTop(CInt(prs.MainWindowHandle))
prs.WaitForExit()
prs.Dispose()
prs.Close()
'最上位フォーム設定
Me.TopMost = True
別ウィンドウ(別EXE)で起動したアプリを最前面に表示したいんだ。どうしたらよいのか?
▼回答
次のAPIを使えばできるぞ!
API名は『BringWindowToTop』だ。
次にサンプルを示しておくから参考にしてくれ!!
'ウィンドウを最前面に表示する関数宣言
Declare Function BringWindowToTop Lib "user32.dll" Alias "BringWindowToTop" (ByVal hWnd As Int32) As Int32
'最上位フォーム設定解除
Me.TopMost = False
'プロセスを起動する.
prs = Process.Start(起動EXEパス, パラメータ)
'最上位フォーム設定
BringWindowToTop(CInt(prs.MainWindowHandle))
prs.WaitForExit()
prs.Dispose()
prs.Close()
'最上位フォーム設定
Me.TopMost = True
木曜日, 5月 01, 2008
[VBA]QueryTable
▼質問
Oracleからのデータバックアップで次のプログラムで実行しているんだが・・・。
「Selection.QueryTable.Refresh BackgroundQuery:=False」
どうやってODBCやSQL文の設定をしているかわからん!?
教えてくれ~!!
▼回答
一度「外部データの取込み」をやると、その時の操作が設定してしまい
変更ができないみたいなんだ。
だから、汎用的にやるには次のプログラムがお勧めだよ!?
With Worksheets(シート名).QueryTables.Add(Connection:="ODBC;DSN=データソース名;UID=ユーザ名;PWD=パスワード名", Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM テーブル名")
.Refresh
End With
Oracleからのデータバックアップで次のプログラムで実行しているんだが・・・。
「Selection.QueryTable.Refresh BackgroundQuery:=False」
どうやってODBCやSQL文の設定をしているかわからん!?
教えてくれ~!!
▼回答
一度「外部データの取込み」をやると、その時の操作が設定してしまい
変更ができないみたいなんだ。
だから、汎用的にやるには次のプログラムがお勧めだよ!?
With Worksheets(シート名).QueryTables.Add(Connection:="ODBC;DSN=データソース名;UID=ユーザ名;PWD=パスワード名", Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM テーブル名")
.Refresh
End With
水曜日, 4月 30, 2008
[VC2005]GetGmtTmとGetLocalTmでエラー
▼質問
GetGmtTmとGetLocalTmメソッドで次のエラーが出る。
「Debug Assertion Failed! Program: パスZZZZ.exe File: パス\atltime.inl Line: 999
Expression: _atl_condVal
For information on how your program can cause an assertion failure. see the Visual C++
documentation on asserts.
(Press Retry to debug the application)」
▼回答
インクルードやデファインを次の様にすれば上手く行くよ!
#pragma warning(disable: 4996)
#define _SECURE_ATL 0
#include
#include
#include
#include
#include
#define ATLTIME_INLINE inline
#include
#include
#define ATLCOMTIME_INLINE inline
#include
■参考サイト
A problem with ATL::CTime.GetLocalTm() - MSDN Forums
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=126206&SiteID=1
ワーニングを抑制する方法 - #pragma warning - VC++
http://www.ailight.jp/blog/sha256/archive/2005/05/04/6684.aspx
GetGmtTmとGetLocalTmメソッドで次のエラーが出る。
「Debug Assertion Failed! Program: パスZZZZ.exe File: パス\atltime.inl Line: 999
Expression: _atl_condVal
For information on how your program can cause an assertion failure. see the Visual C++
documentation on asserts.
(Press Retry to debug the application)」
▼回答
インクルードやデファインを次の様にすれば上手く行くよ!
#pragma warning(disable: 4996)
#define _SECURE_ATL 0
#include
#include
#include
#include
#include
#define ATLTIME_INLINE inline
#include
#include
#define ATLCOMTIME_INLINE inline
#include
■参考サイト
A problem with ATL::CTime.GetLocalTm() - MSDN Forums
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=126206&SiteID=1
ワーニングを抑制する方法 - #pragma warning - VC++
http://www.ailight.jp/blog/sha256/archive/2005/05/04/6684.aspx
木曜日, 4月 24, 2008
[C言語]Run-Time Check Failure #2エラー
▼質問
次のエラーが発生する。
「Run-Time Check Failure #2 - Stack around the variable 'xxx' was corrupted」
▼回答
「xxx」を使っているサイズをチェックすることぐらいかな?!
多分、格納しようとしているサイズが「xxx」より大きいじゃないのかな!?
次のエラーが発生する。
「Run-Time Check Failure #2 - Stack around the variable 'xxx' was corrupted」
▼回答
「xxx」を使っているサイズをチェックすることぐらいかな?!
多分、格納しようとしているサイズが「xxx」より大きいじゃないのかな!?
金曜日, 4月 18, 2008
[VB2005]OO4Oの警告
▼質問
次の警告が出る。どうして?
警告 1 '_IOraBindVariable.GetPersistentPointer' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 2 プロパティ get アクセス操作子 'ResultCode' (有効な戻り値の型のない型 'OracleInProcServer._IExDispatch' 上) がタイプ ライブラリ インポータで見つかりました。インポータはこのプロパティをメソッドとしてインポートすることを試行します。
警告 3 '_IOraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 4 'OraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 5 '_IOraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 6 'OraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 7 '_IOraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 8 'OraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
▼回答
Oracle InProc Server 5.0 Type Library (oip10.tlb) を追加してリビルドすると1度目はでないようだ。
2度目のリビルドで発生することがわかったが・・・。何の解決にもならない。。。
ん~わからない。
毎回、リビルドするたびに削除してリビルドして追加してリビルドするのか!?
めんどくせー!!
もう少し調べて次の様にすることにした。
プロジェクトプロパティ→コンパイル→「ビルド イベント」ボタンのビルド前と後で次のイベントを
実行するようにした。
ビルド前に実行するコマンド ライン
Copy $(ProjectDir)*.dll $(ProjectDir)\obj\Release
Copy $(ProjectDir)*.cache $(ProjectDir)\obj\Release
ビルド後に実行するコマンド ライン
Copy $(ProjectDir)obj\Release\*.dll $(ProjectDir)
Copy $(ProjectDir)obj\Release\*.cache $(ProjectDir)
完璧じゃないけど・・・少しはましになったかも?!
無視してもいい警告だからリビルドしてビルドするだけども良いかも?!
それにしても、よくわからん!!
次の警告が出る。どうして?
警告 1 '_IOraBindVariable.GetPersistentPointer' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 2 プロパティ get アクセス操作子 'ResultCode' (有効な戻り値の型のない型 'OracleInProcServer._IExDispatch' 上) がタイプ ライブラリ インポータで見つかりました。インポータはこのプロパティをメソッドとしてインポートすることを試行します。
警告 3 '_IOraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 4 'OraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 5 '_IOraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 6 'OraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 7 '_IOraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 8 'OraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
▼回答
Oracle InProc Server 5.0 Type Library (oip10.tlb) を追加してリビルドすると1度目はでないようだ。
2度目のリビルドで発生することがわかったが・・・。何の解決にもならない。。。
ん~わからない。
毎回、リビルドするたびに削除してリビルドして追加してリビルドするのか!?
めんどくせー!!
もう少し調べて次の様にすることにした。
プロジェクトプロパティ→コンパイル→「ビルド イベント」ボタンのビルド前と後で次のイベントを
実行するようにした。
ビルド前に実行するコマンド ライン
Copy $(ProjectDir)*.dll $(ProjectDir)\obj\Release
Copy $(ProjectDir)*.cache $(ProjectDir)\obj\Release
ビルド後に実行するコマンド ライン
Copy $(ProjectDir)obj\Release\*.dll $(ProjectDir)
Copy $(ProjectDir)obj\Release\*.cache $(ProjectDir)
完璧じゃないけど・・・少しはましになったかも?!
無視してもいい警告だからリビルドしてビルドするだけども良いかも?!
それにしても、よくわからん!!
火曜日, 4月 15, 2008
[C#]Windowアプリケーションの基本機能
▼質問
フォームに「閉じる」ボタンを貼ったんだけど、「閉じる」ボタンがクリックした時の
イベント処理の方法がわからないんだけど。
VBだとMeなんだけど...
▼回答
C#は、thisを使って次の様に記述するんだ。
this.Close();
■参考サイト
[C#][VB]フォームを閉じる
http://jeanne.wankuma.com/tips/form/close.html
フォームに「閉じる」ボタンを貼ったんだけど、「閉じる」ボタンがクリックした時の
イベント処理の方法がわからないんだけど。
VBだとMeなんだけど...
▼回答
C#は、thisを使って次の様に記述するんだ。
this.Close();
■参考サイト
[C#][VB]フォームを閉じる
http://jeanne.wankuma.com/tips/form/close.html
月曜日, 4月 14, 2008
[VB2005]PrintDocumentコントロール
▼質問
印刷の前に出るメッセージの表示名はどうやったら変更できるの?
▼回答
DocumentNameプロパティを変更すれば表示が変わるよ。
Me.PrintDocument1.DocumentName = "表示名"
印刷の前に出るメッセージの表示名はどうやったら変更できるの?
▼回答
DocumentNameプロパティを変更すれば表示が変わるよ。
Me.PrintDocument1.DocumentName = "表示名"
[VB2005]文字サイズチェック
▼質問
データベースに文字列を格納する時に下記のエラーが出るんだ。
ORA-12899: 列"○×△□"."テーブル名"."フィールド名"の値が大きすぎます(実際: 256、最大: 255)
文字列のサイズをチェックをして、格納サイズより大きい時は
格納サイズより大きい部分は削除したいんだ。どうしたらできるんだい。
文字数のチェックはMaxLengthプロパティに値を入れておけば
自動的にやってくれてはいるんだけど...
▼回答
こんなのできたよ。
Public Shared Function ChkByte(ByVal strValue As String, ByVal byteSize As Integer) As Boolean
If (System.Text.Encoding.GetEncoding("Shift-JIS").GetByteCount(strValue) <= byteSize) Then ChkByte = True
End Function
Public Shared Function GetByte(ByVal strValue As String, ByVal byteSize As Integer) As String
Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
Dim bBytes As Byte() = hEncoding.GetBytes(strValue)
Dim count As Long
For i As Long = Len(strValue) To 1 Step -1
If (ChkByte(Mid(strValue, 1, Len(strValue) - count), byteSize)) Then
Return System.Text.Encoding.GetEncoding("Shift-JIS").GetString(bBytes, 0, Len(strValue) - count)
End If
count = count + 1
Next i
Return strValue
End Function
■参考サイト
VB.NET 全角・半角でのLEFT関数 - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24347&forum=7&start=8
データベースに文字列を格納する時に下記のエラーが出るんだ。
ORA-12899: 列"○×△□"."テーブル名"."フィールド名"の値が大きすぎます(実際: 256、最大: 255)
文字列のサイズをチェックをして、格納サイズより大きい時は
格納サイズより大きい部分は削除したいんだ。どうしたらできるんだい。
文字数のチェックはMaxLengthプロパティに値を入れておけば
自動的にやってくれてはいるんだけど...
▼回答
こんなのできたよ。
Public Shared Function ChkByte(ByVal strValue As String, ByVal byteSize As Integer) As Boolean
If (System.Text.Encoding.GetEncoding("Shift-JIS").GetByteCount(strValue) <= byteSize) Then ChkByte = True
End Function
Public Shared Function GetByte(ByVal strValue As String, ByVal byteSize As Integer) As String
Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
Dim bBytes As Byte() = hEncoding.GetBytes(strValue)
Dim count As Long
For i As Long = Len(strValue) To 1 Step -1
If (ChkByte(Mid(strValue, 1, Len(strValue) - count), byteSize)) Then
Return System.Text.Encoding.GetEncoding("Shift-JIS").GetString(bBytes, 0, Len(strValue) - count)
End If
count = count + 1
Next i
Return strValue
End Function
■参考サイト
VB.NET 全角・半角でのLEFT関数 - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24347&forum=7&start=8
木曜日, 4月 03, 2008
[VB2005]閉じるボタンのキャンセル
▼質問
閉じるボタン(「×」ボタン)をクリックされても閉じないようにするにはどうしたらいいの?
▼回答
FormClosingイベントで次のコードを記述すればできるらしいよ。(^^;
If (e.CloseReason = CloseReason.UserClosing) Then
e.Cancel = True
End If
■参考サイト
ウィンドウの閉じるボタンを押しても終了させない
http://katamari.jp/index.php?dev%2Fvb%2F%A5%A6%A5%A3%A5%F3%A5%C9%A5%A6%A4%CE%CA%C4%A4%B8%A4%EB%A5%DC%A5%BF%A5%F3%A4%F2%B2%A1%A4%B7%A4%C6%A4%E2%BD%AA%CE%BB%A4%B5%A4%BB%A4%CA%A4%A4
閉じるボタン(「×」ボタン)をクリックされても閉じないようにするにはどうしたらいいの?
▼回答
FormClosingイベントで次のコードを記述すればできるらしいよ。(^^;
If (e.CloseReason = CloseReason.UserClosing) Then
e.Cancel = True
End If
■参考サイト
ウィンドウの閉じるボタンを押しても終了させない
http://katamari.jp/index.php?dev%2Fvb%2F%A5%A6%A5%A3%A5%F3%A5%C9%A5%A6%A4%CE%CA%C4%A4%B8%A4%EB%A5%DC%A5%BF%A5%F3%A4%F2%B2%A1%A4%B7%A4%C6%A4%E2%BD%AA%CE%BB%A4%B5%A4%BB%A4%CA%A4%A4
登録:
投稿 (Atom)