2007年11月29日木曜日

as400 dfu 別のデータベース・メンバーで重複キー・エラーが起こった

論理ファイルのunique違反だった

2007年11月27日火曜日

excel-->sqlserver dtsの転送で整合性エラー

null対策で
Function Main()
if isnull( DTSSource("SEHN01")) then
DTSDestination("SEHN01")=" "
else
DTSDestination("SEHN01") = DTSSource("SEHN01")
end if
Main = DTSTransformStat_OK
End Function

というスクリプトを組んでいたが通用しなくなった?ので
素直にcsvで落とすのが吉のようだ

2007年11月22日木曜日

dts vb  「[DBNETLIB]ConnectionOpen(Connect())SQL Serverが存在しないか、アクセスが拒否されました。」

sqlserver2000
dts利用時にエラー

サーバー名をipにしたら受け付けた
私のpcではサーバーのpc名でエクスプローラが開かなくなっている
No15371.アップサイジングウィザードでのエラー

excel2007の範囲からpcomで転送可能なcsvを書き出す vbaに実装する

excel4.0シートをasにアップロードする転送をcsvに切り替えるには
まず ttoをbasic順次に変えて転送記述を変更
pcommの転送記述ファイルの場所を確認 "パス名\ファイル名.fdf"
書き出しファイル名、ファイルパスの決定 "パス\ファィル名.csv"
転送元範囲の書き換え MAKE_CSV_FILE
vba実行後 csvを開いて文字列にダブルコーテーションが入っているか確認

*コードを載せただけでは解析だけで挫折して使ってもらえなそうなので書き換え↑
dimで定義をしていない部分でこけるかも

Sub make_csv1()
Dim strsws As String '転送定義  '文字列 1文字,2数字 例 1110001など
Dim startrow As Integer '範囲の何行目から読むか、1行目がタイトルなら2行目から読むので2

'fdfから定義を読み込み文字列に展開する
callfdf "パス名\ファイル名.fdf", strsws
'excelの範囲名から、定義情報に従い、csvに書き出す
MAKE_CSV_FILE "パス\ファィル名.csv", strsws, startrow

End Sub

範囲を設定するvba

マクロ記録をアレンジしただけのもの
Sub datanamecrt()
Worksheets("data").Activate
start01=3 '例
endr=cells(start01,1).end(xldown).row
if endr=65536 then
endr=start01
end if

adr = "=data!" & Range(Cells(start01, 1), Cells(endr, 11)).Address(ReferenceStyle:=xlR1C1)
ActiveWorkbook.Names.Add Name:="databse", RefersToR1C1:=adr
End Sub

2007年11月21日水曜日

excelの範囲名からcsv形式で書き出す 文字””で囲み数字はそのまま

目的
excel2007からpcomで送信可能なcsvを出力する

no error trap とりあえず文字に""で囲まれて数字はそのままカンマで区切られ
pcomの csv-->asの転送もエラーなく終わりました

'parm2 outfile name
'parm3 judge string? 判定のstring
'parm4 start row ’範囲の先頭行がタイトルだった場合2行のデータ行から読む
'先頭からデータの場合は1行目から読む
'vbaに組み込んで使うのを想定するので転送元ファイル名は指定しない

Sub MAKE_CSV_FILE( outfilecsv, strsws,startrow)
Dim frm(255)
Dim objHANI As Range

name1 = ActiveWorkbook.Name
'転送元範囲セット
'例 Set objHani = Range(Cells(5, 1), Cells(Cells(5, 1).End(xlDown).Row, 30))
Set objHANI = Range(rng)

'定義情報を配列に展開する
GoSub fdf
'ファイルをオープンする
Dim FNO As Integer 'ファイル番号
FNO = FreeFile '空いてるファイル番号を取出す
Open outfilecsv For Output As #FNO 'テキストファイルを新規作成

'行、列でループを作る
Dim y As Integer
Dim x As Integer
For y = startrow To objHANI.Rows.Count '行のループ
'1列目
If frm(1) = "1" Then
Print #FNO, Chr(&H22) & objHANI.Cells(y, 1).Value & Chr(&H22); '先頭項目の出力
Else
Print #FNO, objHANI.Cells(y, 1).Value; '先頭項目の出力
End If
'2列目以降
For x = 2 To objHANI.Columns.Count '列のループ
Print #FNO, ",";
If frm(x) = "1" Then '文字
Print #FNO, Chr(&H22) & objHANI.Cells(y, x).Value & Chr(&H22); '先頭項目の出力
Else '数字
Item1 = objHANI.Cells(y, x).Value
If Item1 = "" Then Item1 = "0"
Print #FNO, Item1; '先頭項目の出力
End If
Next x
Print #FNO, "" '改行のみ出力
Next y

'ファイルをクローズする
Close #FNO
Exit Sub
fdf:
For i = 1 To Len(strsws)
'ReDim frm(1)
frm(i) = Mid(strsws, i, 1)
Next
Return
End Sub

参考
VB テクニック編12 - CSV テキストファイル形式仕様、ハンドリングサンプル

freewareでexcelからcsvに出力するものがたくさんあるがどれもカンマ区切りのみだったり
すべてダブルコーテーションで囲んだりで、その項目を文字数字で判断し列として一貫性がなかったり、pcomの送信につかえないものばかり
可変長にこだわるのはexcelが文字数の制限をしなければ、固定長で転送した場合容易に
転送エラーになるから。文字数制限すればいいじゃんともいえるが、ひとつづつ設定するのが面倒
もともと列にどんだけでも入るんだからこけずに転送させてくれよと
桁はみだしたときは、はみ出したよってメッセージだけで通してねと

つうかどなたかexcel2007のpcでexcel4.0に保存するソフト作ってくれないかな。。。
こんなスクリプト?でも恥ずかしげもなく出せるのがブログのよさ?( ´∀` )
業務で運用しつつエラーが無いだったらどっかの会議室に書き込もうと思います

pcom転送記述FDFから文字数字の判定を切り出す

目的
excel2007で4.0シートが使えなくなったのでエクセルから可変長ファイルでasへ転送を可能にする
excel2007-->csv--pcom-->asの実現
excelはブランクセルがあり列の文字数字の判定が難しい。あらかじめ数字列のブランクに0を埋め込むことで判定は可能だがasの転送記述をもとに転送するので同じ基準で転送した方が間違いが少ないと
思われる

まず転送記述FDFから文字数字の判定を切り出す

fdfとは
PCFDF
PCFT 3
PCFO 1,1,3,1,1
PCFL KOTE 1 5
PCFL REC 2 7
PCFL JMHN 1 10
PCFL HRHN 1 12
PCFL BIKO 1 12
PCFL DESC 1 3
PCFL HN83 1 3
PCFL MF 1 2
PCFL NDT 2 9
PCFL BSU 2 12/3
PCFL BM 1 2
転送記述であるが スペースで区切った3項目目1が文字2が数字をあらわす
4行目からフィールドの判定項目が始る
結果はstrswsという文字列に書き出す
strsws="121111112222" ←こんな感じの結果

Sub callfdf(in_file As String, strsws As String)
'fdffile asの転送記述ファイル,
Dim frm(255)

'in_file = "パス\hr01.fdf"

'** ファイルオープン
FNO = FreeFile
Open in_file For Input As FNO Len = 32000

x = 1
Do Until EOF(FNO)
Line Input #FNO, rec
'4行目から処理
If x >= 4 Then
len1 = Len(rec)
Count1 = 0
For i = 1 To Len(rec)
If Mid(rec, len1 - i, 1) = " " Then Count1 = Count1 + 1
'右から読み込んで2番目のスペースの左から1ケタ分読み込む
'PCFL MF 1 1 mf=フィールド名,文字数字種別,桁数 文字数字種別1=文字、2=数字
If Count1 = 2 Then
frm(x - 3) = Mid(rec, len1 - i + 1, 1)
Exit For
End If
Next
End If
x = x + 1
Loop

Dim y As Integer
'読みだした配列を文字列に書き出す
For y = 1 To 255
strsws = strsws & frm(y)
len2 = Len(strsws)
Next
Close FNO
End Sub

excel2007 範囲名をつける、範囲名を確認するには

セルに「名前」を付けて計算式を読みやすくする
数式-名前の管理から

何回やっても覚えられない。。。

csv

表範囲CSV出力「明日葉」
http://www.vector.co.jp/soft/dl/win95/business/se174370.html
数字文字の判定なくすべて""で囲まれ使えない

pcom のas-->pc biff4ではフィールドの数字には0,文字のブランクセルはブランクで作れれる
excel2003以前でexcel4.0で保存すると数字フィールドでもブランクにおきからえられる
pc-->as時の判定はfdfにフールドが文字か数字か書いてあるのでそれで送信されている
as-->pc biff4と pc -->as biff4では数字が前者では入っていて後者では入っていなくても
問題なく転送されていた

2007年11月17日土曜日

ophcrack モードの変更

ophcrackをブートして ubuntuが立ち上がらずblack screenになってしまうことがあります
テキストモードで起動すると cannt open display などと表示されます
解決策は分かりません(´・ω・`) がモードの替え方は分かったので書きます
google で ophcrack text modeで検査するとすぐ出てくる情報ではあります

boot時にtabキーを押す指示が出て入れるコマンドを要求されますが
kernel /以下を入れるとモードの変更が出来ます

リンク
title Ophcrack LiveCD Graphics mode (auto mode)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;startx
initrd /boot/initrd.gz

title Ophcrack LiveCD Graphics mode (VESA mode)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 rw autoexec=startx
initrd /boot/initrd.gz

title Ophcrack LiveCD (if kernel hangs in other modes)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 acpi=off noagp nopcmcia noapm nousb rw autoexec=xconf;startx
initrd /boot/initrd.gz

title Dump hashes automatically in text mode
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=normal ramdisk_size=6666 root=/dev/ram0 rw autoexec=/root/dump_hash.sh
initrd /boot/initrd.gz

title Ophcrack LiveCD Text mode (to configure X manually)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=normal ramdisk_size=6666 root=/dev/ram0 rw
initrd /boot/initrd.gz

2007年11月16日金曜日

歩留り率

良品/総投入量=歩留り率

部品構成の所要量から使用重量を歩留り率で計算するには
良品=所要量
総投入量=使用重量

総投入量=良品/歩留り率
当り前のようだが
屑重量=総投入量-良品
   =良品/歩留り率-良品
である
屑=良品X(1-歩留り)とすると 単純でわかりやすく見えるが
総投入量=良品+良品X(1-歩留り率)
   =良品(1+1-歩留り率)
   =良品(2-歩留り率)とおかしな計算になる

2007年11月8日木曜日

excel2007環境で dtsでexcel4.0シートを受信するには activex

excel2007環境になって excel4.0シートでの保存ができなくなりました
asからsqlserverに受信するときpcom excel4.0シートを介して転送している処理がすべてこけるようになってしまった。

dts activeXスクリプトサンプル

*saveas がexcel2003の環境でこける(?)のでバージョン判定追加
KazzzのJとNのはざまで 参考

Function Main()
Set xlsobj = CreateObject("excel.application")
With xlsobj
.DisplayAlerts =false
bookname="c:\My Documents\tenso\filename.xls"
bookname1="filename.xls"
.Workbooks.Open bookname
.Workbooks(bookname1).activate

if cint(.Application.Version) <12
.ActiveWorkbook.Saveas bookname
else
.ActiveWorkbook.Saveas bookname,56
end if

.ActiveWorkbook.Close
.DisplayAlerts =true
End With
Set xlsobj = Nothing
Main = DTSTaskExecResult_Success
End Function

エクセルの保存形式56については  
KazzzのJとNのはざまで

2007年11月5日月曜日

excel2007 excel2003書式 スタイルのコピーにかわるコマンド

「ホーム」-「セルのスタイル」-「スタイルの結合」

2007年11月3日土曜日

フォルダが開くない マイミュージック

マイミュージック下にフォルダを誤って移動
エクスプローラでマイミュージックを開くとcpuが高負荷になって開かなくなった

excelファイルを開くからは開く

復帰方法
セーフモードで開くとなぜか開くのでフォルダを元の位置に戻したら正常に開くようになった