忙しい現代人の腰&肩のお悩み対策!

文字が含まれない列の時刻は正しく更新されるのですが、文字が含まれる列は通常は右寄せのはずが左寄せになってしまい、表示形式は「h:mm」なのですがセルを選択すると上のバー?に出るはずの秒が出ません・・・書式設定は一応、時刻になっているのですが・・・たぶん文字列になってしまっているような感じです。

EXCELファイルの形式は下記のようになっています。書式設定は、A列はすべて日付、BとC列はすべて時刻になっています。問題の「休」のセルも時刻のままです。
........A.........B........C.....
1......日付......出勤.....退勤
2....2010/1/1....7:54....18:24
3....2010/1/2....休........
4....2010/1/3....7:48....18:28
5....2010/1/4....7:56....18:33

日付と退勤の列はうまく更新できるのですが、B列の出勤列に「休」と書かれている行があるとB列の更新がうまくいきません。

ソースは、下記のようになっています。
con.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=" & _
"C:\DATE\タイムカード.xls;" & _
"Extended Properties=""Excel 12.0;HDR=YES;"""
Dim cmd As New OleDbCommand()
cmd.Connection = con
con.Open()
cmd.CommandText = "UPDATE [Sheet1$] SET 日付 = @hiduke, 出勤 = @jikoku, 退勤 = @nijikoku WHERE 日付 = 40203"
cmd.Parameters.Add("@hiduke", OleDbType.Variant).SourceColumn = "日付"
cmd.Parameters("@hiduke").Value = Format(DateValue("2010/1/21"), "yyyy/MM/dd")
cmd.Parameters.Add("@jikoku", OleDbType.Variant).SourceColumn = "出勤"
cmd.Parameters("@jikoku").Value = Format(TimeValue("2:40"), "H:mm")
cmd.Parameters.Add("@nijikoku", OleDbType.VarChar).SourceColumn = "退勤"
cmd.Parameters("@nijikoku").Value = Format(TimeValue("15:2"), "H:mm")
cmd.ExecuteNonQuery()

.NET自体初めてなのでおかしなところもあると思いますが、色々試しても結局どうにもならず現在は上記のような状態です。
上記の出勤と退勤のOleDbTypeが違いますが色々試しましたがすべてダメでした・・・
試したのは下記になります
Variant
VarChar
VarChar, 255
Char
DBTime
どのようにすればうまくいくでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (12件中1~10件)

#1です。


#10にも書いてありますが

>>説明不足で申し訳ないのですが、エクセルファイルの時刻を入力する列の書式設定は文字列でなく時刻>>にしたいのです。この列の書式設定をすべて文字列にしてしまうなら、特に変更なく私のソースでも問>>題なく更新できてしまいます・・・

SQLサーバーやACCESSのフィールドも当然、文字型 NvarChar(10) とか あります。

それを 時刻型という型はありませんので日付時刻型(DateTime)にしなければなりません。

時刻の場合 1900/01/01 13:52:00.000 というような形になります。

これを無視して 「休」 などの文字を日付時刻型 に書き込むと エラーになります。

だから すべて文字列で扱うしかないのです。


#10 で説明した 出勤(時)と出勤(分)入力規則のリストで入力させて VB.NET での
Excelシート入力時におけるSQLで 合体させてあげれば大丈夫です。

(IIF(ISNUMERIC(TB.出勤_時),TB.出勤_時 & &':' & TB.出勤_分,TB.出勤_時)) as 出勤

というよな構文です テストしてませんのでデバッグしてください

もし、文字型がどうしてもいやだというならExcelで「休」は別のセルに分けて記入
できるようにしてください。
DBの出力項目も「休」(Nvarchar(4))と出勤(DtaeTime型) としてください。
    • good
    • 0
この回答へのお礼

>すべて文字列で扱うしかないのです。
なるほど・・・やはりそうなのですね。
どの方法でやるか、やり方を検討してみます。

初心者の私にはNOBNNN様のソースが非常に勉強になりました。
ありがとうございました。

お礼日時:2010/01/24 11:54

追伸



エクセルファイルをサーバにして、SQLで、操作するとき
データの挿入、更新、参照を、SQLで、
管理しないと、データの整合性が取れなくなると
すぐおかしくなるかも、

スーパーモードとして、エクセルファイルを
開いて、操作確認する場合は、良いのですが。
サーバファイルを、直接いろいろ操作すると
問題が、いろいろ起きるかもしれません。

そういう意味で、もし、文字型で、今のところ解決しているなら、
そのデータを見るときに、
SQLで、参照して、文字型を、時間型に変えるとかの処理を
するとか、そのような逃げ道の方が、良いかもしれません。
    • good
    • 0
この回答へのお礼

なるほど・・・色々検討して方法を考えようと思います。
勉強になりました。
ありがとうございました。

お礼日時:2010/01/24 11:58

そもそも、勘違いしていました。


これって、エクセルファイル自体をサーバファイルにしているのですよね。

通常、データーベースは、それを構成するテーブル(エクセルで言うシート)
のカラムは、最初の段階で、データ型を定義しています。
データを見て、不思議に思ったのは、もともとのデータに
時間データと文字データが、混在しているということです。
時間データは、文字型にすれば、文字に統一できますが。
エクセルで、時間データとして、、扱いたい時は
別に、処理しなくては、ならなくなると思います。
文字型と、時間型は、混在できいないと思います。

逃げ道として、時間と、休を、別カラムにして、
時間は、時間型として
逃げるか、SQLをあきらめ、エクセルを直接
VB.netで、操作するか???

いろいろ、逃げ道は、あると思いますが。

あと時間型にしても、データタイプは、時間なので、
H:mmという変換は、無意味です。
表示する時に、時間型をフォーマットして、H:mmの
文字列に変換することは、出来ると思いますが。
    • good
    • 0

>>やはり、時刻の書式設定の列に文字列が入っているということでおかしくなってしまうのでしょうが、>>何とか方法はないものでしょうか?


>>また、入力後にそのセルの書式設定をし直すということはできるのでしょうか?(エクセルファイルを>>開かずに)

全部、文字列でもかまわないんでは?

時刻と「休」以外の文字が入力されて困るのならExcelの関数、VBAで作成すれば対処できます。

ユーザー関数といいます。

もうひとつは 入力規則です。

■ 入力規則:http://officetanaka.net/excel/function/tips/tips …
(入力規則のリストを使う)

まず、出勤について 時刻と分の部分の2つのセルに分けます。

「時」のセルには 入力規則のリストで 「休」と 00,01・・・・・24 とします。
「分」のセルには 入力規則のリストで 00,01・・・・・59 とします。

これで対応できるはずです。

=============
>>せっかく頂いたものですのでサンプルも試そうとSQL2008を入れてなかったのでインストールして試そ>>うと頑張ったのですが、どうしてもmanagement studioがエラーでうまくインストールされず仕方なく>>2005をインストールして試したのですが・・・今度は接続がうまくいかずできませんでした・・・初心>>者なので知識不足のようです・

これについては 自習書などで 学んでもらうほかありませんので・・・

===============

今回は DBは Access 2007 などですか SQL SERVER ではないのですか?
ACCESSバージョンにするのも そんなに難しくはないので・・・

■ SQL Server 2008 自習書シリーズ
http://www.microsoft.com/japan/sqlserver/2008/se …

入門編で 勉強してください。
    • good
    • 0

#1 です。


 #7さんの書いている

>>これって、エクセルの問題なのでは、???
>>SQL関係ないと思うのですが。

>>文字があると、エクセルのカラムBが、多分文字列になっているのですよね。
>>なら、カラムBのセルの書式設定を、データを読み込んだ後に
>>時刻に、再設定し見てください。

という現象は当然、折込済みです。

ちょっと、興味がありましたので実験的にプログラムを作ってみました。

添付(ダウンロード)したExcel のデータ「TEST出勤.xls」
は すべて 書式設定は標準ではなく文字列書式にしてあります。
文字列なので、何でも入ります。 だからExcel側で入力規則などで
チェックをする必要があると思います。

まずは ダウンロードしてお試ししてください。

機能として Datagridview に一旦読み込んで、そこでも修正ができるようにしてあります。

なお、テストした結果 正常にDB側に反映がされています。

この回答への補足

サンプル作製までしていただいてありがとうございます。
・・・ただ、説明不足で申し訳ないのですが、エクセルファイルの時刻を入力する列の書式設定は文字列でなく時刻にしたいのです。この列の書式設定をすべて文字列にしてしまうなら、特に変更なく私のソースでも問題なく更新できてしまいます・・・

せっかく頂いたものですのでサンプルも試そうとSQL2008を入れてなかったのでインストールして試そうと頑張ったのですが、どうしてもmanagement studioがエラーでうまくインストールされず仕方なく2005をインストールして試したのですが・・・今度は接続がうまくいかずできませんでした・・・初心者なので知識不足のようです・・・

私のやりたいこととしては、このエクセルファイルはタイムカードと給料計算を兼ねたもので、出勤 退勤 休憩などの入力自体はVBAのユーザーフォームで作成されていて、計算は関数とVBAで作成されています。このファイルが仕事場のPCで開かれていて、従業員に押してもらっているのですが、時刻入力の修正やうち忘れの記入を、違うPCから.NETで作成したもので操作できるようにしたいと思い作成しています。

VBAの管理用フォームで修正はできるように作ってはあるのですが、VBAを始めたばかりなのに.NET(VB2008)に興味を持ってしまい.NETで作成してみたいと思ったわけです・・・最初は、.NETでエクセルファイルを開いて修正するものを作ってうまくいったのですが、ADOなるものを発見したためこれを利用してできないものかと・・・

やはり、時刻の書式設定の列に文字列が入っているということでおかしくなってしまうのでしょうが、何とか方法はないものでしょうか?
また、入力後にそのセルの書式設定をし直すということはできるのでしょうか?(エクセルファイルを開かずに)

補足日時:2010/01/22 16:08
    • good
    • 0

******************引用******************


文字が含まれない列の時刻は正しく更新されるのですが、
文字が含まれる列は通常は右寄せのはずが左寄せになってしまい、
表示形式は「h:mm」なのですがセルを選択すると上のバー?に出るはずの秒が出ません・・・
書式設定は一応、時刻になっているのですが・・・たぶん文字列になってしまっているような感じです。

EXCELファイルの形式は下記のようになっています。
書式設定は、A列はすべて日付、BとC列はすべて時刻になっています。
問題の「休」のセルも時刻のままです。
........A.........B........C.....
1......日付......出勤.....退勤
2....2010/1/1....7:54....18:24
3....2010/1/2....休........
4....2010/1/3....7:48....18:28
5....2010/1/4....7:56....18:33

日付と退勤の列はうまく更新できるのですが、
B列の出勤列に「休」と書かれている行があるとB列の更新がうまくいきません。
********************************************

これって、エクセルにクエリで、データベースのデータを読み込んでいるのでよね。
これって、エクセルの問題なのでは、???
SQL関係ないと思うのですが。

文字があると、エクセルのカラムBが、多分文字列になっているのですよね。
なら、カラムBのセルの書式設定を、データを読み込んだ後に
時刻に、再設定し見てください。


たとえば
カラムAに

7:30


と二つのデータを入れると、7:30は、時刻タイプと文字タイプになります。
カラムAを、強引に文字列に、書式設定すると、

0.3215


の二つの文字列に変化されます。

エクセルで、読み込むと、確か、最初の、何個目かで、
そのカラムの、データタイプをエクセルが、勝手に設定していると
聞いたことがあります。
休が入ったので、そのカラムが、文字列型になって、
時間も、文字に変換されている可能性があります。

対応方法としては、カラムBの時刻を、再度、書式設定で、
時間に戻しても、解決しなかったら、
ごめんなさい。

この回答への補足

回答ありがとうござあいます。

>エクセルで、読み込むと、確か、最初の、何個目かで、そのカラムの、データタイプをエクセルが、勝手に設定していると聞いたことがあります。

やはりそうなのですか?色々試しているうちにわかったのですが、質問の例では行数が少ないですが本当はもっと下に続いていて「休」ももっとあります。で、何個か「休」を消してみると、「休」がすべてないわけではないのに、時刻の更新がうまくいく(書式が正しく時刻になる)ときもあるのです。・・・といっても、消すわけにもいかないので解決にはなりませんが・・・


>対応方法としては、カラムBの時刻を、再度、書式設定で・・・

再度、書式設定というのはエクセルファイルを開いてということでしょうか?・・・だとすると、毎回修正(更新)の度にそのあとエクセルファイルを開いて書式設定の修正をするようですと、最初からエクセルファイルを開いてそのまま時刻修正したほうが早くなってしまいますので・・・
しかも不思議なことにエクセルファイルを開いて書式を「時刻」に再設定してもなぜか文字列のままでなおらないのです・・・

エクセルファイルを開かずに書式の再設定ができる方法があれば良いのですが・・・

補足日時:2010/01/22 16:48
    • good
    • 0

#1 です



いままで説明をしましたが大変、長いので

期間限定で プログラムなど全データをダウンロードできるようにしておきます。

■ファイルの受取
以下URLからファイル受取サイトへアクセスして頂くことでファイルのダウン
ロードを行うことができます。
ファイルの取得期限は 2010年1月25日 3時03分06秒 JST です。

https://www.datadeliver.net/receiver/fileBox.do? …

============

ZIP 形式です。 解凍を行ってください。
    • good
    • 0

サンプルプログラムでは データセットのクラスを プロジェクトに追加し、作成しています。



フォームのデザイン画面にて メニューのデータ/新しいデータの接続にて 「KINTAI」 のDBを接続し、データソースより。 適出勤名簿の テーブルのいづれかの項目を 配置(ドラッグ&ドロップ)
すると自動的に 必要な項目が作成されます。(TAbleADpter BindingDatasource)

つぎに作成されたデータセットをデザイナ画面にて 新しいデータテーブルを作成します。

名前は 「出勤名簿_excel」としています。
このデーターテーブルに次の項目を追加します。

1、日付 (文字列)
2、出勤 (文字列)
3、出退 (文字列)
4、社員番号(文字列)

とします。

フォーム(Form1)のデザイナ画面を開きます。
データーソースの「出勤名簿_Excel」のプルダウンにてDatagridview にします。
そのまま 「出勤名簿_Excel」のを選択したまま 画面へドラッグ&ドロップします。

「出勤名簿_Excel」のDatagridview が画面に配置されます。

これらの作業を先に行ってから サンプルプログラムのソースをコピー&ペーストしてください。

なおexcelシートの項目名が一致しないとエラーになります。
データーテーブル「出勤名簿_Excelの項目名と一致させてください。
    • good
    • 0

#3のつづき


============

Private Sub Btn_DBUPD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_DBUPD.Click

Call S_DB出勤名簿_UPD()
End Sub

Private Sub S_DB出勤名簿_UPD()
'サーバーより保存データ(勤務表)を読み込む、社員番号で絞り込む
Me.出勤名簿TableAdapter.FillBy(Me.KINTAIDataSet.出勤名簿, Me.KINTAIDataSet.出勤名簿_excel.Rows(0).Item("社員番号"))

'日付順に並び替える。 検索準備

Dim Dv As DataView = New DataView(Me.KINTAIDataSet.出勤名簿, "", "日付", DataViewRowState.CurrentRows)

For I As Integer = 0 To Me.KINTAIDataSet.出勤名簿_excel.Rows.Count - 1

Dim Wrow As KINTAIDataSet.出勤名簿_excelRow = Me.KINTAIDataSet.出勤名簿_excel.Rows(I)

Dim Sidx As Integer = Dv.Find(Wrow.Item("日付").ToString) '日付で検索

If Sidx <> -1 Then 'データが存在したなら
Dv.Item(Sidx).Delete() '同じ日付のデータは上書きするため一旦削除
End If


With Dv.AddNew() '新しい行を追加する
.Item("社員番号") = Wrow.Item("社員番号").ToString
.Item("日付") = Wrow.Item("日付").ToString
.Item("出勤") = Wrow.Item("出勤").ToString
.Item("退勤") = Wrow.Item("退勤").ToString
.EndEdit()
End With


Me.出勤名簿TableAdapter.Update(Me.KINTAIDataSet.出勤名簿) 'DBへ更新


Next
End Sub
End Class
========================================
サンプルはここで終わり.

◆つづく
    • good
    • 0

#2 のつづき


==================
Private Function F_Excel_Open() As String
Dim ofd As New OpenFileDialog()

'はじめのファイル名を指定する
'はじめに「ファイル名」で表示される文字列を指定する
ofd.FileName = "" '"default.Xls"
'はじめに表示されるフォルダを指定する
'指定しない(空の文字列)の時は、現在のディレクトリが表示される
ofd.InitialDirectory = "C:\"
'[ファイルの種類]に表示される選択肢を指定する
'指定しないとすべてのファイルが表示される
ofd.Filter = _
"Excelファイル(*.Xls)|*.Xls|すべてのファイル(*.*)|*.*"
'[ファイルの種類]ではじめに
'「Excelファイル」が選択されているようにする
ofd.FilterIndex = 1
'タイトルを設定する
ofd.Title = "開くファイル(Excel)を選択してください"
'ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
ofd.RestoreDirectory = True
'存在しないファイルの名前が指定されたとき警告を表示する
'デフォルトでTrueなので指定する必要はない
ofd.CheckFileExists = True
'存在しないパスが指定されたとき警告を表示する
'デフォルトでTrueなので指定する必要はない
ofd.CheckPathExists = True

'ダイアログを表示する
If ofd.ShowDialog() = DialogResult.OK Then
'OKボタンがクリックされたとき
'選択されたファイル名を返す
Return ofd.FileName
Else
Return Nothing
End If

End Function
==============

つづく
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q[Excel]ADODBでNull変換されてしまう

お世話になります。
今、Office2003で次のようなマクロを作成しています。
マクロが保存されているブックM、
参照するデータが保存されているブックD、
出力先のブックOがあり、
ブックMにてADODBをつかって、ブックDからSQLによる条件でブックOへ出力します。

このとき、ブックDのセルではちゃんとデータがセットさせているのに
出力したブックOでは空になってしまうという現象が発生して困っています。

デバッグ等して確認してみたところ、
書式が標準のセルで、文字列型の数値(文字列型のセルから値コピーした場所)が入っていると
RecordSetにとれた段階でNullに変換されてしまてしまっているように見えました。

この問題を解決するために何かよい方法はありますでしょうか?

ソースコードの詳細は確認できないのですが
こんな感じだったと思います。
※ rs.Requeryにて、rsの中身を確認した時点でNullだったので QueryTablesによる取り込みは関係ないと考えています。

Set conn = CreateObject("ADODB.Connection")
conn.Open ConnectString

Set sql = CreateObject("ADODB.Command")
sql.CommandType = 1
sql.ActiveConnection = conn
sql.CommandText = SQL文(? とUNION含む)
sql(0) = パラメータ設定
...

Set rs = CreateObject("ADODB.RecordSet")
Set rs = sql.Execute
With Sheet1.QueryTables.Add(rs, "A1")
.AdjustColumnWidth = False
.FieldNames = True
.BackgroundQuery = False
.Refresh False
.Delete
End With
...

お世話になります。
今、Office2003で次のようなマクロを作成しています。
マクロが保存されているブックM、
参照するデータが保存されているブックD、
出力先のブックOがあり、
ブックMにてADODBをつかって、ブックDからSQLによる条件でブックOへ出力します。

このとき、ブックDのセルではちゃんとデータがセットさせているのに
出力したブックOでは空になってしまうという現象が発生して困っています。

デバッグ等して確認してみたところ、
書式が標準のセルで、文字列型の数値(文字列型のセルから値コピーし...続きを読む

Aベストアンサー

度々失礼。
http://support.microsoft.com/kb/194124/ja
全てが強制的に文字列に変わるようですが

With conn
  .Provider = "Microsoft.Jet.OLEDB.4.0"
  .Properties("Extended Properties").Value = "Excel 8.0;IMEX=1" '■
  .Properties("Data Source") = "c:\temp\data.xls"
  .Open
End With
..『オプション IMEX=1;』を追加する方法でもいいかもしれません。

さっきのSub try()のQueryTableオブジェクトだけで使う場合はConnectionを以下に変更です。

wkCON = "OLEDB;" & _
    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\temp\data.xls;" & _
    "Extended Properties=""Excel 8.0;IMEX=1;"""

度々失礼。
http://support.microsoft.com/kb/194124/ja
全てが強制的に文字列に変わるようですが

With conn
  .Provider = "Microsoft.Jet.OLEDB.4.0"
  .Properties("Extended Properties").Value = "Excel 8.0;IMEX=1" '■
  .Properties("Data Source") = "c:\temp\data.xls"
  .Open
End With
..『オプション IMEX=1;』を追加する方法でもいいかもしれません。

さっきのSub try()のQueryTableオブジェクトだけで使う場合はConnectionを以下に変更です。

wkCON = "OLEDB;" & _
    "Provider=Mi...続きを読む

Q抽出条件でデータ型が一致しません。のエラーメッセージが出る

フォームで入力された値を、
次のファイルでクエリを読み込むときに代入するASPを作成しましたが、実行しようとすると、
「データ型が一致しません。」のエラーメッセージが出ます。
DBはACCESSを使用しています。ACCESSの対象テーブルで、
データ型を「テキスト型」にすると問題ないのですが、
「数値型」にすると、「データ型が一致しません」の
エラーメッセージになります。
フォームでは、プルダウンで「数値」を選択するようになっています。
宜しくお願いします。

Aベストアンサー

Where区に指定した条件のフィールドが数値なら『'』でくくる必要がありません

Set rs = db.Execute("SELECT テーブル3.* FROM テーブル3 WHERE (テーブル3.番号)=" & bangou)
といった具合に修正してみましょう

『'』でくくる必要があるのは対象のフィールドが文字列の場合です

Q【ADO】「Execute」を使うときは「Update」は不要?

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

を実行したとき
テーブル1にデータがあるときはエラーにはならないのですが
何もデータがないときは「rs.Update」でエラーになります。
なので「Update」は消して実行していますが
「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか?

よろしくお願いします。

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

を実行したとき
テーブル1にデータがあるときはエラーにはならないのですが
何もデータがないときは「rs.Update」...続きを読む

Aベストアンサー

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

Sub test()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
cn.Execute "DELETE FROM テーブル1"
Set cn = Nothing
End Sub
と変更しても変わりはありません。
データベースの更新を行うだけが目的であるのならば、コピーを作成する必要はありません。

一方、ユーザーの操作を非同期(操作と処理が同時でないこと)で、データベースに反映したい場合にレコードセットを使用した更新を使用します。
Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
'フォームロードでレコードセットを作成し、ボタン押下で削除するなど
'今回は一括削除
Do Until rs.EOF
rs.Delete
rs.MoveNext
Loop
rs.close
cn.close
Set rs = Nothing
Set cn = Nothing
End Sub

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

Sub test()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLE...続きを読む

QAccess ADOで文字列を日付型へinsert

VBScriptでCSVファイルのデータをADO経由でAccessにinsertしたいのですが、日付型へのinsertがうまくいきません。
CSVファイルにある「8桁日付」(例:20110101)をAccessの日付型フィールドへinsertするのに、以下の試みをしましたが、型不一致etcのエラーがでてしまいました。
どうしたら、insertできるのでしょうか?

1.8桁日付を yyyy/mm/dd に編集(mid使用) してinsert →型不一致エラー
2.CDATE(yyyy/mm/dd) をinsert →型不一致エラー
3.CDATE(#yyyy/mm/dd#) をinsert →型不一致?エラー

ハマってしまって困っています。ご存知の方がいらっしゃいましたら是非是非教えてください。

Aベストアンサー

SQLのINSERT文を使っているのですか?
この場合、日付は#で囲みます。
INSERT INTO ~ SELECT #2011/02/24# ~
又はCDate関数では文字列にします。
INSERT INTO ~ SELECT CDate("2011/02/24") ~

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QVB.NETの配列にExcelから読み込んできたデータを格納したい

今回もお世話になります。
VisualBasic.NETでプログラムを作っています。
Excelからデータを読み込んで配列に格納したいのですが、どうしてもうまくいきません。
原因とその解決法を教えていただけないでしょうか?
また、他の解決法や参考にできるサイトがあれば教えていただきたいです。
Excel,VB.NETともに2003を使っています。


以下エラー内容
--------------------
'System.NullReferenceException' のハンドルされていない例外が 重度障害者用入力装置自動選択システム.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
--------------------


以下ソースです
--------------------
Option Explicit On
Imports Microsoft.Office.Interop

Public Class Form2
Inherits System.Windows.Forms.Form


Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim xl As Object 'Excel.Application
Dim wb As Object 'Excel.Workbook
Dim ws As Object 'Excel.Worksheet

xl = CreateObject("Excel.Application")
 wb = xl.Workbooks.Open("C:\abc.xls")
xl.Visible = True

ws = wb.Worksheets("Sheet1")

配列(1, 1, 1) = xl.Cells(2, 1).Value←ここでエラーが出る
配列(1, 1, 2) = xl.Cells(2, 2).Value
配列(1, 1, 3) = xl.Cells(2, 3).Value

状態表示テキストボックス.Text = "配列(1, 1, 1) = " & 配列(1, 1, 1) & "と" _
& "配列(1, 1, 2) = " & 配列(1, 1, 2) & "と" _
& "配列(1, 1, 3) = " & 配列(1, 1, 3)

xl = Nothing
wb = Nothing
ws = Nothing

End Sub
End Class
--------------------
回答よろしくお願いします。

今回もお世話になります。
VisualBasic.NETでプログラムを作っています。
Excelからデータを読み込んで配列に格納したいのですが、どうしてもうまくいきません。
原因とその解決法を教えていただけないでしょうか?
また、他の解決法や参考にできるサイトがあれば教えていただきたいです。
Excel,VB.NETともに2003を使っています。


以下エラー内容
--------------------
'System.NullReferenceException' のハンドルされていない例外が 重度障害者用入力装置自動選択システム.exe で発生しました。
...続きを読む

Aベストアンサー

こんにちは

********引用*******
の部分で「型excel.Applicationが定義されていません」というエラーが出てしまいます。
*******************

私の場合、参照設定が、上手くいっていないと
このエラーが出るみたいです。

プロジェクトのプロパティを見て、
参照設定を見て、エクセルのオブジェクトライブラリーが追加されているか??
確認してみてください。

Qデータソース名および指定された既定のドライバが見つかりません。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

Try
cn.Open()
MsgBox("Connected")
Catch ex As Exception
MsgBox("NG")
Debug.Print(ex.Message, "Error") ←(A)
Finally
cn.Close()
End Try

(A)で「ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。」

のメッセージが出ます。
VB2005の「ツール」-「サーバの接続」では接続確認が取れているのですが、
コードで書くとエラーになってします。

何か書き忘れているのでしょうか。。。
すみませんがよろしくお願いいたします。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
...続きを読む

Aベストアンサー

>cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
>"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

自分の環境に合わせないとね?????

これの意味はインポートしているんですよね? スクリプトはVBSの事ですかね。VBA? VBですよね?

Imports System.Data
Imports Microsoft.Data.ODBC


それと見るHPがちょこと違う。
http://msdn.microsoft.com/ja-jp/library/system.data.oracleclient.oraclelob.aspx

QVB.NET Excelファイル読み込み

VB初心者です。

VB.NETでExcelファイルを読み込みたいんですが、実行する端末にExcelがインストールされていなくても可能ですか?

また、その読み込み方法を教えて頂きたいです。(もしくは参考サイト)

お願いします><

Aベストアンサー

セル値の読み書きだけでいいなら、可能です。

Visual Basic .NET と ADO.NET を使用して Excel ブックのレコードの取得と変更を行う方法
http://support.microsoft.com/kb/316934/ja

QACCESSのSQLで数値型に変換するには

こんにちわ。今SQLの書き方が分からなくて大変困っております。
ACCESS2000で、テーブルが一つあるとします。
テーブルの内容は、氏名・点数の2項目だとします。

点数が50点より大きい人を抽出したいのですが、
項目は全てSTRING型にしないといけないため、
単純に比較できません。抽出した項目を数値型に
変換して、比較したいのですが、どのように書いたらいいのでしょうか。

SELECT  Shimei , CAST(Tensuu AS NUMERIC)
FROM   Table1
WHERE   Tensuu > 50;

このようなクエリを書いてみましたがエラーが出てしまいます。
ORACLEではTO_NUMBERなどの関数があると思うのですが、
ACCESSではどのようにしたらいいのでしょうか??
よろしくお願いします。

Aベストアンサー

この程度か?

SELECT テーブル1.Shimei, CInt([Tensuu]) AS 得点
FROM テーブル1
WHERE (((CInt([Tensuu]))>50));

それではヘルプでCIntでも確認してね。

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。


人気Q&Aランキング